Мне нужен «MultiStack», берущий разные типы объектов, помещая каждый тип в отдельный стек.
Это то, на что это похоже. Открытая проблема заключается в следующем: как обрабатывать контейнеры для множества различных T
class MultiStack
{
public:
template<typename T>
const T& Get()
{
return Container<T>.back();
}
template<typename T>
void Push( const T& t )
{
Container<T>.push_back( t );
}
template<typename T>
void Pop( const T& /*t*/ )
{
Container<T>.pop_back();
}
private:
// this does not make sense, we obv. need one stack for each T
// template<typename T>
// std::vector<T> Container;
};
Теперь я мог бы использовать старый трюк, помещая Контейнер в функцию-член, например
template<typename T>
auto GetContainer()
{
static std::vector<T> C;
return C;
}
но мне больше не нравится это в эпоху многопоточности. Это «опасно», верно!?
Есть ли лучший, элегантный способ? Вполне возможно, что я заранее знаю разрешенные типы, если это поможет их реализовать.