c++ - 如何在构造函数参数中初始化`std::set`?
问题描述
我有一个以 astd::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>
在调用构造函数之前创建一个实例是不切实际的。如果有办法做到这一点,我愿意接受。
研究:
在互联网上搜索得到了有关将 an 实例初始化std::set
为单独语句的示例,而不是参数初始化。
我之前对这个概念的尝试是unsigned int
对初始化列表中的值进行按位或运算。我正在“升级”以使用std::set
.
环境:
编译器:Visual Studio 2017
平台:Windows 10 和 Windows 7
解决方案
您的伪代码是有效的 C++11 - 它正在std::initializer_list
调用std::set
. wandbox.org 上的实时示例
推荐阅读
- c++ - 清除输入缓冲区
- r - 如何在包含两列的 Rmarkdown pdf 中插入全宽表格?
- javascript - 干杯。处理另一个函数的错误后无法在 TRY 体内获取数据
- android - Microsoft Teams - 如何从 Android Intent 启动 MS Teams
- c++ - 如何将 cmake 与 boost asio 一起使用?
- javascript - 单击按钮时从 React.js 函数返回图像
- typescript - 我可以从数组中提取类型吗?
- r - 按 data.table 中的组将值拖动到前导 NA 单元格(滚动 NA 替换)
- javascript - 如何检测 webkitSpeechRecognition 是否真的在浏览器中工作
- javascript - React 传单地图获得经纬度角