У меня есть конструкция, которая принимает 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