C++ 使用联合中的函数返回联合的活动成员

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

或者在其外部结构/类中(如果匿名嵌套)。(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 *= 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不过,罗珀回答得很清楚。