为什么不呢
template <template<class...> class StorageT> class Builder { // ... StorageT<Object> storage_; }; Builder<std::vector>()...; Builder<std::list>()...;
我不明白你到底想要什么,但......
问题的关键是:我可以使用typedef作为一种“模板变量”,这样我就可以存储用户定义的模板变量吗?
我不这么认为;类型可以是模板参数,而不是变量;所以typedef是一个固定的实体,并且(据我所知)不能改变。
此外:
typedef std::vector Storage;
不起作用,因为 std::vector<int> 是一种类型但是 std::vector 不是。
std::vector<int>
std::vector
但 std::vector 可以是模板模板参数。
我可以想象,为了帮助你,最好的是内部模板结构 Storage 使用模板模板参数。
Storage
以下是可编辑的示例
#include <list> template <template <typename ...> class C> class Object { }; class Builder { private: template <template <typename...> class C> struct Storage { Object<C> init() { return Object<C>{}; } }; public: Builder () { } template <template <typename...> class C> Storage<C> & storage() { static Storage<C> ret{}; return ret; } }; int main () { auto o = Builder{}.storage<std::list>().init(); static_assert(std::is_same<decltype(o), Object<std::list>>{}, "!"); }