boost::variant的诡异现象引发的思考
#include
#include
#include
#include
#include
#include
using namespace std;
using namespace boost;
struct MyPair
{
template
MyPair(const T1&& k, const T2&& v):key(k), value(v){}
template
MyPair(const T1& k, const T2& v) : key(k), value(v) {}
#if 1 //bug fix
template MyPair(const T1 &k, const char* v) : key(k), value(string(v)) {}
template MyPair(const char* k, const T2& v) : key(string(k)), value(v) {}
MyPair(const char* k, const char* v) : key(string(k)), value(string(v)) {}
#endif
boost::variant key;
boost::variant value;
};
class test
{
class my_visitor : public boost::static_visitor<>
{
public:
template
void operator()(const T1 &key, const T2 &value) const
{
//cout << typeid(T1).name()<<":"<< typeid(T2).name() << endl;
cout << boost::get(key) << ":" << boost::get(value) << endl;
}
};
public:
test(const std::initializer_list& pairs)
:test(begin(pairs),end(pairs))
{
}
template
test(const T& b,const T &d)
{
for_each(b, d, [](auto &t) {boost::apply_visitor(my_visitor(), t.key, t.value);
});
}
};
int main()
{
test t({ {"kl", "111"},{"k2", 123},{"k3",456} });
return 0;
}
【boost::variant的诡异现象引发的思考】上代码,输出
kl:111
k2:123
k3:456
把fix出开关关闭 输出
1:1
1:123
1:456
猜猜为什么呢? 原来编译器优先把const char*转换为bool,而不是string,参考链接
https://stackoverflow.com/questions/13268608/boostvariant-why-is-const-char-converted-to-bool
推荐阅读
- 热闹中的孤独
- JAVA(抽象类与接口的区别&重载与重写&内存泄漏)
- 放屁有这三个特征的,请注意啦!这说明你的身体毒素太多
- 一个人的旅行,三亚
- 布丽吉特,人生绝对的赢家
- 慢慢的美丽
- 尽力
- 一个小故事,我的思考。
- 家乡的那条小河
- 《真与假的困惑》???|《真与假的困惑》??? ——致良知是一种伟大的力量