成员函数模板(如您的getData()
)不能是虚拟的。但是,您可以拥有一个带有虚拟成员函数的类模板:
template <class T>
class data_ppp {
public:
virtual boost::shared_ptr<T> getData()
{
return boost::shared_ptr<T>(new T());
}
};
这允许相当多的定制。
1)你可以定义一个类data_ppp< std::vector<int> >
。如果该类需要表现得像一个泛型T
,那么你就完成了。
2)如果您想要覆盖特定数据用途但所有类型的行为T
并且想要动态使用新功能,您可以从data_ppp<T>
template <class T>
class data_child: public data_ppp<T> {
public:
virtual boost::shared_ptr<T> getData()
{
// add logging, printing or whatever you want
return boost::shared_ptr<T>(new T());
}
};
3)如果你只想重新定义getData()
等于T
,std::vector<int>
你只需要专门化data_ppp
template <>
class data_ppp< std::vector<int> > {
typedef std::vector<int> T;
public:
virtual boost::shared_ptr< T > getData()
{
// add logging, printing or whatever you want
return boost::shared_ptr<T>(new T());
}
};