【发布时间】:2018-09-25 13:09:26
【问题描述】:
我有这个 没有工作 代码,它应该展示我想要实现的目标:
class Member
{
const char * someText;
union Parameter
{
const char * ptrParameter;
double doubleParameter;
uint uintParameter;
};
};
class MyClass
{
auto foo( std::vector<Member> & ) -> void;
};
int main()
{
MyClass instance;
instance.foo(
{
{ "SomeText", "TextParameter" },
{ "SomeDouble", 3.14159 },
{ "SomeUint", 32767 }
}
);
}
我想要达到的目标:
-
MyClass::foo需要std::vector<Member>作为参数。 - 此向量应直接从初始化列表传递。
-
Member的第二个参数可以有不同的类型,这里用 用union Parameter表示。 - 如何检测
MyClass::foo中的哪些类型已通过? -
union Parameter中的类型只能是描述的这 3 个。
我尝试了很多,但由于我是 C++ 初学者,我没有成功。
我正在使用 C++17 - Boost 不是一个选项。如何实现?
【问题讨论】:
-
C++ 联合不跟踪哪个成员处于活动状态。事后无法恢复该信息。
std::variant会为你工作吗? -
@hvd YES,我得先检查一下。
union在这里只是我想要实现的一个占位符。什么都满足我将使用的要求。
标签: c++ vector c++17 initializer-list