模板方法的接口

Interface for template methods

本文关键字:接口 模板方法      更新时间:2023-10-16

我有一个类Foo,它提供某种功能。为了保持模块化,Foo是一个接口(也就是说,一个只有抽象方法的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( );

函数指针本身没有模板化,但可以指向被模板化的函数。也许这也能解决你的问题。