2016-02-27 92 views
2

这是非Boost C++ 11。对于两种不同类型的单个堆栈式容器,最佳选择是什么?东西会像这样工作假想场景:deque上有多种类型?

template<typename T> 
deque <pair<T, v8::Local<v8::Value>>> my_queue; 

uint32_t aUint = ...; 
v8::Local<v8::Value> value1 = ...; 
v8::Local<v8::String> aString = ...; 
v8::Local<v8::Value> value2 = ...; 

my_queue.push_back(make_pair(aUint, value1)); 
my_queue.push_back(make_pair(aString, value2)); 
+1

为什么你想重新发明'boost :: variant'?只需使用'boost :: variant'即可。 –

+0

那么如果你不能使用'boost :: variant',你可以使用'union',但是它的安全性要低很多,你必须小心。 –

+0

这是一个公共npm模块。由于Boost依赖性,我遇到了用户无法编译模块的问题。得到了一个合理的解决方案? –

回答

1

下面的代码使用std::experimental::any做到这一点。

#include <experimental/any>                                             
#include <deque> 

int main() 
{ 
    std::deque<std::experimental::any> d; 
    d.push_back(1); 
    d.push_back(std::make_pair(3, 2)); 
} 

我真的不知道这是否符合您的要求(显然不是严格的标准C++ 11)。 FWIW,它使用g ++ - 5与--std=c++1y构建。