可以模板抽象类接口
Can abstract class interface be templated
可以模板抽象类接口我们可以使用派生类中的模板填充参数吗?如何为这些类型的需求定义接口参数
class iconfigurator
{
public:
iconfigurator();
virtual ~iconfigurator();
//EXpect the std::vector<class entry>& entries to be Template type.
virtual bool config(const std::string& configName,std::vector<class entry>& entries) const = 0;
};
class derivedconfigurator : public iconfigurator
{
public:
derivedconfigurator();
virtual ~derivedconfigurator();
virtual bool config(const std::string& configName,std::vector<class another_entry_type>& entries) const = 0;
}
class derivedconfigurator2 : public iconfigurator
{
public:
derivedconfigurator2();
virtual ~derivedconfigurator2();
virtual bool config(const std::string& configName,std::maps<key, value>& entries) const = 0;
}
模板只是编写N功能或类的快捷方式。
template <typename T> class MyClass {}
MyClass<int> mc1 {};
MyClass<int> mc2 {};
编译器将生成2个不同类别的代码:MyClass<int>
和MyClass<double>
。您本可以自己写信,那将是完全一样的!因此,实际上A normal 类和从模板生成的类之间没有区别。因此,对于问题,抽象类接口是否可以模板,答案是肯定的。请注意,尽管您将每种类型有1个抽象接口,如上所述(就像您写过MyClass
的两个定义一样,请考虑一下(。当然,您也可以在派生的类中使用模板。
您无法做的就是使用模板的虚拟函数。为什么?模板在编译时生成代码。虚拟功能是关于在运行时弄清楚要调用的功能。因此,编译器不可能知道要生成哪个代码,因为要在运行时确定要调用的函数。
模板抽象接口的一个示例:
template <typename T>
struct Base
{
virtual ~Base() = default;
// YOU CAN DO THIS
virtual void test() const = 0;
// BUT YOU CANNOT DO THIS
/*template <typename D>
virtual void fct();*/
};
template <typename T>
struct Derived : Base<T>
{
void test() const override {}
};
int main()
{
Base<int>* b = new Derived<int>();
b->test();
delete b;
return 0;
}
相关文章:
- 抽象类/接口中的空方法是否被认为是一种好的做法?
- 可以模板抽象类接口
- C 分开的抽象类(接口),用于某些通用读取和/或写入访问
- C++中的抽象类与接口
- 我可以在c++接口(抽象类)中包含什么
- 不可变接口的抽象类
- 如何在C++中编程到接口/抽象类
- 接口与抽象类C++
- 抽象类/接口C++
- 防止在C++中对抽象类接口进行子类化
- 接口与抽象类?(一般OOP)
- 通过抽象模板基类接口指针访问派生类方法,而无需在接口中显式类型
- 接口、协议和抽象类
- C#对导出抽象类/接口的C++DLL函数的消耗
- 它是抽象类还是纯虚拟(接口)
- 抽象类作为接口,不带虚函数表
- 接口(抽象类)设计的最佳方法
- c++中的头文件和Java中的抽象类/接口实现是相同的想法,这是正确的吗?
- 抽象类-C++接口交换
- 从纯抽象类(接口)进行虚拟继承是必要的