用模板类型指定模板类型的类型

Posted

技术标签:

【中文标题】用模板类型指定模板类型的类型【英文标题】:Specifying the type of a templated type with a templated type 【发布时间】:2013-08-12 00:21:43 【问题描述】:

当我想用模板类型定义向量的模板类型时会发生什么?我有一个类Customer,它是模板化的,因此构造函数可以采用vector<T> 类型的参数。现在我想实例化一个 Customer 类型的全局 Vector 并发现自己想输入 vector<Customer<Customer<Customer<etc<etc>>>>>

我知道这可能是一个无聊的问题,但我很想对我发现的这个小泡菜有一个简洁的解释。

提前谢谢...

【问题讨论】:

【参考方案1】:

如果您想要特定类型的vector Customer,那么一切都很简单:

template < typename T >
class Customer

public:
  Customer( std::vector< Customer< T > > vec );


std::vector< Customer<CustomerType> > v;

std::vector< Customer<CustomerType>* > v;

但是,如果您想要客户模板的不同实例,那么除了为类定义一些公共基础并存储它之外别无他法:

class CustomerBase 
 
   /* common functionality */
;

template < typename T > 
class Customer : public CustomerBase



std::vector< CustomerBase* > v;
v.push_back( Customer< TypeA >() );
v.push_back( Customer< TypeB >() );

【讨论】:

我意识到我的困惑源于我需要将其指定为我的类型的模板类型,因为客户需要将其模板类型指定为 Customer...Doh!感谢您的快速响应!

以上是关于用模板类型指定模板类型的类型的主要内容,如果未能解决你的问题,请参考以下文章

类模板参数

类模板三种类模板参数

C++模板非类型模板参数

类模板深度剖析

模板之类模板

如何使用 <> 指定类型参数来创建模板类 [关闭]