用c++11打造好用的variant(更新)(二)
) << endl; //将输出double
int i = v.GetIndexOf(); //将输出索引位置2
c++11版本的variant
下面来看看c++11版本的vairant的具体实现了:
View Code
测试代码:
复制代码
typedef Variant cv;
//根据index获取类型
cout << typeid(cv::IndexType<1>).name() << endl;
//根据类型获取索引
cv v=10;
int i = v.GetIndexOf();
//通过一组lambda访问vairant
v.Visit([&](double i){cout << i << endl; }, [&](short i){cout << i << endl; }, [](int i){cout << i << endl; },
[](string i){cout << i << endl; }
);
bool emp1 = v.Empty();
cout << v.Type().name() << endl;
复制代码
c++11版本的vairant不仅仅比boost的variant更好用也更强大,经过测试发现性能也优于boost.variant,因此可以在项目中用这个c++11版本的variant替代boost的variant。实际上我的并行计算库中已经用自己的variant和any代替了boost.variant和boost.any,从而消除了对boost的依赖。
c++11 boost技术交流群:296561497,欢迎大家来交流技术。