C++ 使用联合中的函数返回联合的活动成员
或者在其外部结构/类中(如果匿名嵌套)。(With),将存储当前值/类型。您可以对变量应用C++ 使用联合中的函数返回联合的活动成员,c++,c++14,unions,C++,C++14,Unions,或者在其外部结构/类中(如果匿名嵌套)。(With),将存储当前值/类型。您可以对变量应用static\u visitor,例如: #include "boost/variant.hpp" #include <iostream> class times_two_visitor : public boost::static_visitor<> { public: void operator()(int & i) const { i
static\u visitor
,例如:
#include "boost/variant.hpp"
#include <iostream>
class times_two_visitor : public boost::static_visitor<>
{
public:
void operator()(int & i) const
{
i *= 2;
}
void operator()(std::string & str) const
{
str += str;
}
};
int main()
{
boost::variant<int, std::string> u("hello world");
std::cout << u; // output: hello world
boost::apply_visitor(times_two_visitor(), u);
std::cout << u; // output: hello worldhello world
u = 21;
boost::apply_visitor(times_two_visitor(), u);
std::cout << u; // output: 42
}
#包括“boost/variant.hpp”
#包括
类时间\u two\u访问者:public boost::static\u访问者
{
公众:
void运算符()(int&i)常量
{
i*=2;
}
void运算符()(std::string和str)常量
{
str+=str;
}
};
int main()
{
boost::变体u(“hello world”);
std::您不能这样做。此信息未存储。您可以通过仅允许setter修改联合的成员来存储它。(注册传递的类型)。你看过boost::variant
和它的static\u visitor
?@KerrekSB有趣的是,它在常量表达式中处理联合时必须存储。你可以在例如Clang上观察到这一点。我不确定你是否可以提取信息,不过…@Jarod42是的,这是我正在寻找的。你应该将它作为一个p不过,罗珀回答得很清楚。