C++ C+中的模板+;原始类型
在Java中,我们可以执行以下操作: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
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.:我在上面做了一个小的编辑,以清楚地表明我建议使用纯虚拟接口