2016-02-27 2 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.