我有一个Foo
提供某种功能的类。为了保持模块化,Foo
就是要成为一个接口(也就是一个只有抽象方法的C++类),而Foo的一个实现可以选择具体如何实现功能。但是,我的界面包含一个模板方法。那是,
class Foo
{
public:
template<class T>
void functionality(const T&);
};
不可能C++
有模板方法virtual
。是否有任何技术可以使用模板方法实现类似的结果(模块化和多态性)?
我有一个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( );
函数指针本身没有模板化,但可以指向模板化的函数。也许这也可以解决您的情况。