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

Returning the active member of a union using a function within it

或在其外部 struct/class 内(如果匿名嵌套)。 (<- 添加到标题而不使其变长)。

我希望能够简单地调用一个函数并获取正在使用的联合成员(通过任何方式,例如返回它,修改参数等......),而不是类型(或标识符)类型)但实际成员,或指向它的 non-void 指针。有没有办法在现代 (c++14) c++ 中做到这一点?

使用boost::variant,存储当前value/type。您可以将 static_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
}