模板方法的接口

时间:2013-04-19 17:53:35

标签: c++ templates inheritance interface polymorphism

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

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

C++无法使用模板方法virtual。是否有任何技术可以使用模板方法获得类似的结果(模块化和多态)?

1 个答案:

答案 0 :(得分:1)

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

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

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

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

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