我在规范与模板类的接口时遇到了一些麻烦。为什么会编译以下内容?
class IFoo {
public:
virtual void functionA()=0;
};
template<class T>
class Foo : public IFoo{
public:
void functionA() override { };
void functionB() override { };
};
functionB在IFoo中显然不存在,那么为什么编译器不抛出错误?目前正在GCC 5.4上运行。
关于我如何处理此问题的一些背景知识:我正在为我的一个副项目编写一些代码,该代码在很大程度上取决于常见的线性代数例程。我想对库的选择进行抽象,以例如促进基准测试。想法是使用类似IFoo的接口来执行此操作,以便业务逻辑代码仅了解IFoo,而不必适应任何单个线性代数库的怪癖。这是可行的,因为仅需要几个关键功能。我不想为所有可用的操作提供接口。我需要模板,以允许使用不同精度的处理,例如,浮点数,双精度数,小浮点数等都由同一子类处理。
在我看来,针对此问题的明智设计是使用此接口在单独的编译单元中重新包装对这些库的访问,以生成实现此接口的独立静态库或运行时库。从一个库到另一个库的交换就像链接到所需库一样简单。无需更改代码。对此总体策略的任何想法也表示赞赏!
仅当某些其他代码使用模板时,才会实例化模板。您的示例没有该代码,因此无论是否编译都没有关系。尝试创建一个对象,Foo<int>
然后亲自查看GCC会抱怨。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句