带有原始类型的C ++模板

时间:2013-12-22 08:29:10

标签: c++ templates

在Java中,我们可以这样做:

ArrayList arrayList = new ArrayList<String>(); 
// Notice that String is not mentioned in the first declaration of array

反对

ArrayList<String> arrayList = new ArrayList<String>(); 

我们怎样才能在C ++中有类似的东西?

2 个答案:

答案 0 :(得分:4)

不完全按照你写的方式。

您可以做的是以下其中一项,具体取决于您实际要完成的任务:

  • 在C ++ 11中,您可以使用auto自动适应类型:auto = new ArrayList<String>();。这不会给你多态性,但它确实可以节省你在左侧键入typename。
  • 如果您想要多态,可以在类层次结构中添加一个级别,并使左侧指向父类。

以下是第二种方法的示例:

class IArrayList   // define a pure virtual ArrayList interface
{
     // put your interface pure virtual method declarations here
};

template <typename T>
class ArrayList : public IArrayList
{
     // put your concrete implementation here
};

然后,你可以在你的代码中说:

IArrayList* arrayList1 = new ArrayList<string>();
IArrayList* arrayList2 = new ArrayList<double>();

......等等。

答案 1 :(得分:2)

在c ++中,您无法使用vector array = new vector<string>(),但在c ++ 11中,您可以使用auto关键字:auto p = new vector<string>(),它与vector<string> *p = new vector<string>()相同。希望我的回答可以帮到你。