使用其中的函数返回联合的活动成员
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
}
或在其外部 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
}