c++ - 模板方法的接口(interface)

标签 c++ templates inheritance interface polymorphism

我有一个提供某种功能的类 Foo。为了保持模块化,Foo 是一个接口(interface)(即只有抽象方法的 C++ 类),Foo 的实现可以选择具体如何实现功能。但是,我的界面包含一个模板方法。也就是说,

class Foo
{
public:
        template<class T>
        void functionality(const T&);
};

C++ 中不可能有模板方法 virtual。是否有任何技术可以通过模板方法实现类似的结果(模块化和多态性)?

最佳答案

您不能将运行时多态性直接与模板混合。然而,另一层间接可能会有所帮助。这是一个人为的例子:

template <typename T>
inline void *New( void )
{
  return new T( );
}

只要存在默认构造函数,此函数将允许用户动态分配任何类型的对象。现在获取一个函数指针并将其分配给这个新函数:

void *(*NewFuncPtr)( void ) = New<int>;
int *i = (int *)NewFuncPtr( );

函数指针本身不是模板化的,但可以指向一个模板化的函数。也许这也可以解决您的情况。

关于c++ - 模板方法的接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16110685/

相关文章:

swift - 在 Storyboard中创建继承属性的导出

c++ - 从公共(public)派生类访问 protected 成员

c++ - Windows MSG 结构与遗留项目代码结构 MSG 冲突

C++ 定义由一组固定整数组成的类型的最佳方法

templates - 如何获取 D 模板中函数别名的名称?

c++ - 编写一个模板函数来评估具有任何返回类型的 lambda 函数?

c++ - 错误 C2662 无法从 const 转换为引用

c++ - operator new/delete 和类层次结构

templates - 相当于 ASP Classic 中的母版页

java - 基于另一个类创建一个类的实例