【发布时间】:2015-06-23 16:38:38
【问题描述】:
我有一个不同类型的 boost::variant,其中一个是 (const) void 指针,另一个是字符串。
boost::variant<std::string, void const*>;
问题是,如果我想将它与 c 字符串一起使用,它会将其转换为 void 指针而不是字符串。
boost::variant<std::string, void const*> foo;
foo = "bar";
std::cout << foo.which(); // prints 1 -> void const*
如果我删除指针的常量,它会将它转换为字符串。
boost::variant<std::string, void*> foo; // no const pointer
foo = "bar";
std::cout << foo.which(); // prints 0 -> string
有没有一种简单的方法可以让 boost::variant 将 c-string 隐式转换为 std::string?
更新
我知道我可以使用以下方式进行显式转换:
foo = std::string("bar");
但我想避免显式转换。
【问题讨论】:
-
foo = std::string("bar");怎么样?见ideone.com/kgK2gm -
@m.s.对不起,我忘了提到我不想一直明确地投射它。我会更新我的问题。
-
使用 C++14,
foo = "bar"s;? -
那就更糟了。如果你有一个
variant<std::string, bool>,并且你用字符串初始化它,你会得到一个布尔值。
标签: c++ implicit-conversion boost-variant