C++ C+中的模板+;原始类型

C++ C+中的模板+;原始类型,c++,templates,C++,Templates,在Java中,我们可以执行以下操作: ArrayList arrayList = new ArrayList<String>(); // Notice that String is not mentioned in the first declaration of array ArrayList ArrayList=new ArrayList(); //请注意,在数组的第一个声明中没有提到字符串 与 ArrayList<String> arrayList = new

在Java中,我们可以执行以下操作:

ArrayList arrayList = new ArrayList<String>(); 
// Notice that String is not mentioned in the first declaration of array
ArrayList ArrayList=new ArrayList();
//请注意,在数组的第一个声明中没有提到字符串

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

<>我们如何在C++中使用类似的方法?

不完全按照你写的方式。 根据您实际要完成的任务,您可以执行以下操作之一:

  • 在C++11中,可以使用
    auto
    自动适应类型:
    auto=newarraylist()。这不会提供多态性,但它确实可以节省您在左侧键入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
};
class IArrayList//定义纯虚拟ArrayList接口
{
//将接口纯虚拟方法声明放在这里
};
模板
类数组列表:公共数组列表
{
//把你的具体实现放在这里
};
然后,您可以在代码中说:

IArrayList* arrayList1 = new ArrayList<string>();
IArrayList* arrayList2 = new ArrayList<double>();
iaraylist*arrayList1=newarraylist();
iaraylist*arrayList2=新的ArrayList();

…等等。

与您的写作方式不完全一样

根据您实际要完成的任务,您可以执行以下操作之一:

  • 在C++11中,可以使用
    auto
    自动适应类型:
    auto=newarraylist()。这不会提供多态性,但它确实可以节省您在左侧键入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
};
class IArrayList//定义纯虚拟ArrayList接口
{
//将接口纯虚拟方法声明放在这里
};
模板
类数组列表:公共数组列表
{
//把你的具体实现放在这里
};
然后,您可以在代码中说:

IArrayList* arrayList1 = new ArrayList<string>();
IArrayList* arrayList2 = new ArrayList<double>();
iaraylist*arrayList1=newarraylist();
iaraylist*arrayList2=新的ArrayList();


C++中,你不能使用<代码>向量数组=新矢量()/Cuth>,但是在C++ 11中,你可以使用<代码> Auto <代码>关键字:<代码> Auto P=新矢量()/>代码,它与<代码>向量*P=新矢量()/C> >相同。希望我的答案能帮助你。C++中的< /P> < P>,你不能使用<代码>向量数组=新矢量()/<代码>但在c++11中,您可以使用
auto
关键字:
auto p=new vector()
,它与
vector*p=new vector()
相同。希望我的答案能帮助您。

std::vector array的方式大致相同。你试过什么?我已经把问题声音更新成XY问题了。你为什么需要这个?以后你想做什么,需要模板参数被删除?不,C++没有这样做。但是,您可以(在C++11中)说
autox=std::vector标准:向量数组的方式大致相同。你试过什么?我已经把问题声音更新成XY问题了。你为什么需要这个?以后你想做什么,需要模板参数被删除?不,C++没有这样做。但是,您可以(在C++11中)说
autox=std::vector。错误的建议。您不能提供
IArrayList
的工作定义。它必然是一个空接口,或者是一个将类型检查移动到运行时的接口,即与类模板要求的相反。它给了我一个想法:P@n.m.:是的,我建议
IArrayList
成为一个纯虚拟界面。模板
class ArrayList
定义了一系列实现该接口的类,但提供了专门的实现。接口类仅强制接口的公共性。如何将类型检查移动到运行时?它只是依靠旧的虚拟调度来做正确的事情。您仍然只有一个实现,尽管它是template类中的模板化实现。@n.m.:我在上面做了一个小的编辑,以清楚地表明我建议为IArrayList提供一个纯虚拟接口。只要模板
类ArrayList
中只有一个实现,我认为这就很好地解决了这个问题。如果您需要有更广泛的类依附于此接口,那么您可以有一个更通用的
ArrayListPL
类,它们都可以私自继承(或拥有一个实例)来实现一些通用的guts,或诸如此类。@n.m.:好,我想它为我点击了你的意思:你不能定义任何依赖于
t
(模板参数)作为界面一部分的东西。知道了。这对于某些类型的模板类来说不是问题,但是对于模板化的容器类来说是一个坏问题,例如
ArrayList
可能是,因为不知道如何在没有其他恶作剧的情况下将项目放入/移出容器。这是一个糟糕的建议。您不能提供
IArrayList
的工作定义。它必然是一个空接口,或者是一个将类型检查移动到运行时的接口,即与类模板要求的相反。它给了我一个想法:P@n.m.:是的,我建议
IArrayList
成为一个纯虚拟界面。模板
class ArrayList
定义了一系列实现该接口的类,但提供了专门的实现。接口类仅强制接口的公共性。如何将类型检查移动到运行时?它只是依靠旧的虚拟调度来做正确的事情。您仍然只有一个实现,尽管它是template类中的模板化实现。@n.m.:我在上面做了一个小的编辑,以清楚地表明我建议使用纯虚拟接口