我正在尝试使用boost :: variant库创建一个地图,但我似乎无法获得地图中保存的任何数据以便正确打印。
代码:
#include <string>
#include <iostream>
#include "boost_1_55_0/boost/any.hpp"
#include "boost_1_55_0/boost/variant.hpp"
#include <map>
#include <list>
#include <complex>
#include <vector>
using namespace std;
int main()
{
std::map <string, boost::variant <int, double, bool, string> > myMap;
myMap.insert(pair<string, int>("PAGE_SIZE",2048));
myMap.insert(pair<string, boost::variant <int, double,bool, string> > ("PAGE_SIZE2", "hello, this is a string" )); //setup an enum to specify the second value maybe?
cout << "data page 1: " << myMap["PAGE)SIZE1"] << "\ntype page 1: " << myMap["PAGE_SIZE"].which() << endl;
cout << "data: " << myMap["PAGE_SIZE2"] << "\ntype: "<< myMap["PAGE_SIZE2"].which()<< endl;
return 0;
}
忽略所有额外的包含,我一直在使用这个文件来玩很多不同的想法。当我用g ++编译时,我得到以下内容:
data page 1: 0
type page 1: 0
data page 2: 1
type page 2: 2
我得到第一个变量存储为int,因此类型为0,但为什么它显示的值为0?
与第二个输出相同,除了我不明白为什么它被存储为bool,值是1(真)?
感谢所有帮助。
谢谢!
答案 0 :(得分:3)
第二个存储为bool
,因为它是一个更基本的转换,而不是std::string
(编译器更喜欢const char*
- &gt; bool
到const char*
} - &gt; std::string
)。由于指针为非null,因此它将布尔值赋值为true。您可以在此处专门构建std::string
以解决默认转换问题。
至于为什么数据输出不起作用我唯一可以怀疑的是可能BOOST_NO_IOSTREAM
被设置,导致它没有适当的operator<<
。