gpt4 book ai didi

c++ - 抽象类接口(interface)是否可以模板化

转载 作者:太空宇宙 更新时间:2023-11-04 12:33:48 24 4
gpt4 key购买 nike

抽象类接口(interface)可以模板化吗我们可以在派生类中使用模板来填充参数吗?如何为这些类型的需求定义接口(interface)参数

  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> .您可以自己编写它们,它们会完全一样!所以,普通类和从模板生成的类实际上没有区别。所以,对于抽象类接口(interface)能否被模板化这个问题,答案是肯定的。请注意,如上所述,每种类型都有 1 个抽象接口(interface)(就像您已经编写了 MyClass 的两个定义一样)。当然,您也可以在派生类中使用模板。

你不能做的是使用模板化虚函数。为什么?模板在编译时生成代码。虚函数是关于确定在运行时调用哪个函数。因此,编译器不可能知道要生成哪些代码,因为要调用的函数是在运行时确定的。

一个模板化抽象接口(interface)的例子:

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++ - 抽象类接口(interface)是否可以模板化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57317920/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com