我正在尝试将'通用集'作为参数传递。
template<class T>
class Printer {
public:
static doprint (std::set < T >& ms){
for (std::set::const itr = ms.begin(); itr!= ms.end(); ++itr)
{
//do processing. e.g. printing
cout<< ms.print();
}
ms.clear();
}
};
我使用
调用方法std::set <classA> setA; //both class A and B have a .print() method
std::set <classB> setB;
// populates A & B
Printer::doPrint(setA);
Printer::doPrint(setB);
但是我收到以下错误
error: 'template <class T> class Printer' used without template parameters.
关于我如何解决这个问题的任何想法?
答案 0 :(得分:3)
因为模板在课堂上,所以在调用doPrint时必须明确地调用它:
Printer<classA>::doPrint(setA) ;
通常为了解决这个问题,人们会创建辅助函数,这些函数可以自己找出模板参数:
template <class T>
void call_doprint(std::set < T >& ms) { Printer<T>::doPrint( ms) ; }
然后你可以打电话:
call_doprint( setA) ;
这是人们喜欢make_sharedptr
和make_pair
比调用构造函数更好的一个原因。
答案 1 :(得分:0)
std :: set不是类只是一个模板。打印机也是如此。因此,只要您希望将它们实际用作类型,就必须提供模板参数来实例化类。这意味着std :: set :: const_iterator,Printer和Printer。