c++ - 在 C++ 中为抽象类模板创建接口(interface)

标签 c++ inheritance templates pointers interface

我有如下代码。我有一个抽象模板类 Foo 和两个子类(Foo1 和 Foo2),它们派生自模板的实例化。我希望在我的程序中使用可以指向 Foo1 或 Foo2 类型的对象的指针,因此我创建了一个接口(interface) IFoo。

我的问题是我不确定如何在界面中包含 functionB,因为它依赖于模板实例化。是否有可能通过接口(interface)访问 functionB,还是我在尝试不可能的事情?

非常感谢您的帮助。

class IFoo {
    public:
        virtual functionA()=0;

};

template<class T>
class Foo : public IFoo{
    public:
        functionA(){ do something; };
        functionB(T arg){ do something; };
};

class Foo1 : public Foo<int>{
...
};

class Foo2 : public Foo<double>{
...
};

最佳答案

你实际上是在尝试不可能的事情。

问题的核心很简单:virtualtemplate 不能很好地混合。

  • template 是关于编译时代码生成的。您可以将其视为某种类型感知宏 + 一些用于元编程的小技巧。
  • virtual 是关于运行时决策的,这需要一些工作。

virtual 通常使用虚拟表来实现(想象一个列出方法的表)。方法的数量需要在编译时知道,并在基类中定义。

但是,根据您的要求,我们需要一个无限大小的虚拟表,其中包含我们尚未见过的类型的方法,并且只会在未来几年内定义......很遗憾这是不可能的。

如果可能的话?

好吧,这没有任何意义。当我用 int 调用 Foo2 会发生什么?这不是为了它!因此它打破了Foo2实现IFoo中所有方法的原则。

所以,如果您陈述真正的问题会更好,这样我们可以在设计层面而不是技术层面为您提供帮助:)

关于c++ - 在 C++ 中为抽象类模板创建接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3251549/

相关文章:

r - 如何正确使用 R 中继承的 S4 类的有效性函数

c# - 接口(interface)继承 : what do you think of this:

c++ - 是否可以将调用站点上对象的静态类型用作其模板方法的自动推导模板参数?

php - 哪些模板语言适用于 JS 和 PHP?

c++ - char 和 wchar_t 的模板没有给出匹配的成员

c++ - 先到先得程序 C++ 表格格式

c++ - Visual Studio Code 看不到系统上安装的库

c++ - 将标准元组解包为指针?

javascript - 参数未通过两级 JavaScript 构造函数传递

C++如何使用模板对 vector 进行排序