【发布时间】:2019-10-13 03:19:34
【问题描述】:
我有一个用于构造 SQL 语句的 QueryField 和 Select 辅助类:
class QueryField
{
public:
QueryField(std::string_view column)
: m_column{ column }
{
}
QueryField(std::string_view column, std::string_view alias)
: m_column{ column }
, m_alias{ alias }
{
}
private:
std::string m_column;
std::string m_alias;
};
class Select
{
public:
Select(std::initializer_list<QueryField> fields)
{
for (auto & field : fields)
{
m_fields.emplace_back(std::move(field));
}
}
private:
std::vector<QueryField> m_fields;
};
从上面的代码可以看出 Select 是一个 QueryField 对象的集合,可以这样初始化:
Select{ QueryField{ "up.audit_option" "option" }, QueryField("uep.success"), QueryField("uep.failure") };
是否可以消除显式指定 QueryField 并按如下方式初始化 Select 对象的需要?
Select{ { "up.audit_option" "option" }, "uep.success", "uep.failure" };
【问题讨论】:
-
我试过一次,甚至问过我猜。我很确定异构初始化列表目前在 cpp 中是不可能的
-
如果我错了,请纠正我,但你想要一个同质(相同类型)而不是异构(不同类型)列表
-
你用的是什么编译器?对我来说似乎编译得很好? godbolt.org/z/XwgbD-?还是我缺少什么?
标签: c++ c++17 initializer-list