我已经宣布boost::variant
,它接受三种类型: string
, bool
和int
。 下面的代码表明我的变种接受const char*
并将其转换为bool
。 它是一个正常行为boost::variant
接受和转换类型不是它的名单上?
#include <iostream>
#include "boost/variant/variant.hpp"
#include "boost/variant/apply_visitor.hpp"
using namespace std;
using namespace boost;
typedef variant<string, bool, int> MyVariant;
class TestVariant
: public boost::static_visitor<>
{
public:
void operator()(string &v) const
{
cout << "type: string -> " << v << endl;
}
template<typename U>
void operator()(U &v)const
{
cout << "type: other -> " << v << endl;
}
};
int main(int argc, char **argv)
{
MyVariant s1 = "some string";
apply_visitor(TestVariant(), s1);
MyVariant s2 = string("some string");
apply_visitor(TestVariant(), s2);
return 0;
}
输出:
类型:其它 - > 1
类型:字符串 - >一些字符串
如果我从MyVariant删除布尔类型和它改成这样:
typedef variant<string, int> MyVariant;
const char*
没有更多的转换为bool
。 这一次,它会转换为string
,这是新的输出:
类型:字符串 - >一些字符串
类型:字符串 - >一些字符串
这表明, variant
会尝试先转换成其他类型的bool
,然后string
。 如果类型转换是不可避免的事情,应该经常发生,有没有什么办法让转换为string
更高的优先级?