У меня есть конструкция, которая принимает параметр std::set
как параметр.
Как инициализировать набор в параметре конструктора?
Вот минимальный концептуальный пример. Фактическая реализация намного больше.
#include <set>
enum class Fruits
{
APPLE, PEACH, BANANA, STRAWBERRY, LEMON
};
class Pie
{
public:
Pie(const std::set<Fruits>& flavors)
: m_flavors(flavors)
{
}
std::set<Fruits> m_flavors;
};
int main()
{
// What is syntax for initialization here?
Pie p(std::set<Fruits> {Fruits::APPLE, Fruits::BANANA});
return 0;
}
Цель состоит в том, чтобы иметь возможность указывать значения для set
в списке параметров.
В псевдокоде:
Pie p({Fruits::APPLE, Fruits::BANANA});
Вышеупомянутое могло бы привести к тому, что std::set
, инициализированный APPLE, BANANA
, будет конструктором class Pie
.
Эта концепция будет использоваться в следующем фрагменте:
class Fruit_Pie
: public Pie
{
Fruit_Pie()
: Pie(/* wish: {Fruits::APPLE, Fruits::LEMON}*/)
{ ; }
};
В приведенном выше фрагменте создание экземпляра std::set<Fruits>
перед вызовом конструктора нецелесообразно. Если есть способ сделать это, я открыт для этого.
Исследование:
В результате поиска в Интернете появились примеры инициализации экземпляра std::set
как отдельного оператора, а не инициализации параметров.
Моя предыдущая попытка этой концепции состояла в том, чтобы использовать unsigned int
и побитовое ИЛИ значения в списке инициализаторов. Я был «обновлен», чтобы использовать std::set
.
Среда:
Компилятор: Visual Studio 2017
Платформа: Windows 10 и Windows 7
Всего 1 ответ
Ваш псевдокод действителен. C ++ 11 - вызывает перегрузку std::initializer_list
конструктора std::set
. живой пример на wandbox.org