C++ 传入集合时出错<;模板T>;作为参数

C++ 传入集合时出错<;模板T>;作为参数,c++,templates,stl,C++,Templates,Stl,我试图将“泛型集”作为参数传递 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

我试图将“泛型集”作为参数传递

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();
    }
};
模板
类打印机{
公众:
静态doprint(std::set&ms){
对于(std::set::const itr=ms.begin();itr!=ms.end();++itr)
{
//进行处理,例如打印

cout因为模板在类上,所以在调用doPrint时必须显式地调用它:

Printer<classA>::doPrint(setA) ;

这就是人们喜欢
make_sharedptr
,和
make_pair
的原因之一。

std::set不仅仅是一个模板,它是一个模板。打印机也是。因此,无论何时,当你想实际使用它们作为类型时,你都必须提供模板参数来实例化一个类。这意味着std::set::const\u迭代器,打印机和打印机。

错误消息会准确地告诉您问题所在。(关于
Printer::doPrint(setA);
等如何?)哦!这修复了错误。我仍在学习如何使用模板。谢谢。
error: 'template <class T> class Printer' used without template parameters.
Printer<classA>::doPrint(setA) ;
template <class T>
  void call_doprint(std::set < T >& ms) { Printer<T>::doPrint( ms) ; } 
call_doprint( setA) ;