Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/142.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 从c+中的任意类继承+;?_C++ - Fatal编程技术网

C++ 从c+中的任意类继承+;?

C++ 从c+中的任意类继承+;?,c++,C++,是否可以设计一个从基类组的任何一个继承的类?我希望能够写出以下内容: 派生类:public ArbitraryBase{ 公众: 派生():任意基(){} ... }; 其中,arbirybase可以是编译时确定的某个基类。我有一组基类,我想从中派生相同的类。有没有一种方法可以避免为每个基类编写单独的派生类?如果在编译时确实确定了,您可以将派生类作为模板: template<class T> class Derived : public T { public:

是否可以设计一个从基类组的任何一个继承的类?我希望能够写出以下内容:

派生类:public ArbitraryBase{
公众:
派生():任意基(){}
...
};

其中,
arbirybase
可以是编译时确定的某个基类。我有一组基类,我想从中派生相同的类。有没有一种方法可以避免为每个基类编写单独的派生类?

如果在编译时确实确定了,您可以将派生类作为模板:

template<class T>
class Derived : public T {
    public:
        Derived() {}

    ...
};
模板
派生类:public T{
公众:
派生(){}
...
};
您可以稍后通过提供基本类型来创建并实例化此类:

int main() {
    Derived< ??? > my_object;

    ...
}
intmain(){
派生的<??>我的\u对象;
...
}

其中
是获取派生类型的编译时方法。

如果在编译时确实确定了派生类型,则可以将派生类作为模板:

template<class T>
class Derived : public T {
    public:
        Derived() {}

    ...
};
模板
派生类:public T{
公众:
派生(){}
...
};
您可以稍后通过提供基本类型来创建并实例化此类:

int main() {
    Derived< ??? > my_object;

    ...
}
intmain(){
派生的<??>我的\u对象;
...
}

其中
是获取派生类型的编译时方法。

您可以通过模板来实现这一点。使用

template<typename T>
class Derived : public T
{
public:
    Derived() : T() {}
    // or just use if actually need to provide a default constructor
    Derived() = default;
};
现在
d
是从
Base1
继承的
派生的

如果需要从任意数量的基继承,则可以使用可变模板,如

template<typename... Bases>
class Derived : public Bases...
{
public:
    Dervied() : Bases()... {}
    // or just use if actually need to provide a default constructor
    Derived() = default;
};
模板
派生类:公共基。。。
{
公众:
Dervied():base()…{}
//或者,如果实际需要提供默认构造函数,只需使用
派生()=默认值;
};
它的用途就像

Derived<Base1, Base2, ..., BaseN> d;
d;

您可以通过模板执行此操作。使用

template<typename T>
class Derived : public T
{
public:
    Derived() : T() {}
    // or just use if actually need to provide a default constructor
    Derived() = default;
};
现在
d
是从
Base1
继承的
派生的

如果需要从任意数量的基继承,则可以使用可变模板,如

template<typename... Bases>
class Derived : public Bases...
{
public:
    Dervied() : Bases()... {}
    // or just use if actually need to provide a default constructor
    Derived() = default;
};
模板
派生类:公共基。。。
{
公众:
Dervied():base()…{}
//或者,如果实际需要提供默认构造函数,只需使用
派生()=默认值;
};
它的用途就像

Derived<Base1, Base2, ..., BaseN> d;
d;

“其中,
任意基
可以是编译时确定的某个基类。”它是如何确定的?可能的解决方案可能取决于此。嗯。。。我不确定它到底是如何工作的。当以某种方式构造派生类时,我需要指定从哪个基类继承。在构造基类实例之前,不能构造派生类。基类实例总是在派生类实例之前构造。“where
ArbitraryBase
可以是编译时确定的某个基类。”它是如何确定的?可能的解决方案可能取决于此。嗯。。。我不确定它到底是如何工作的。当以某种方式构造派生类时,我需要指定从哪个基类继承。在构造基类实例之前,不能构造派生类。基类实例总是在派生类实例之前构造?@RinatVeliakhmedov则它不会从基继承。不过我还是要删除它,因为OP用
Derived
更新了他们的代码,并拥有自己的构造函数?@RinatVeliakhmedov则它不会从基继承。不过我要删除它,因为OP用
Derived
更新了他们的代码,并拥有自己的构造函数。