lur*_*her 35
如果你看到我关于永不空保证和单个存储的问题,boost::variant那么支持一个类似NIL的值类型boost::blank.这将保证变体永远不会使用堆作为备份存储
您可以检测存储的类型,使用哪种类型boost::variant<>::which()返回绑定变量类型的整数索引; 所以如果你使用空白作为第一种类型,那么()将在其空白时返回0
请参阅以下示例
typedef boost::variant< boost::blank , int , std::string > var_t;
var_t a;
assert( a.which() == 0 );
a = 18;
assert( a.which() == 1 );
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助
Mat*_* M. 18
A boost::variant始终初始化.
如果您没有明确地将其初始化,则使用其默认构造函数构造第一个项目:
struct Foo {};
struct Bar {};
struct Visitor: boost::static_visitor<>
{
void operator()(Foo const& foo) const { std::cout << "Foo\n"; }
void operator()(Bar const& bar) const { std::cout << "Bar\n"; }
};
int main(int argc, char* argv[])
{
boost::variant<Foo,Bar> var;
boost::apply_visitor(Visitor(), var); // prints Foo
return 0;
}
Run Code Online (Sandbox Code Playgroud)