错误传递set <template t =“”>作为参数</template>

时间:2013-11-28 07:29:14

标签: 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
            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.

关于我如何解决这个问题的任何想法?

2 个答案:

答案 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_sharedptrmake_pair比调用构造函数更好的一个原因。

答案 1 :(得分:0)

std :: set不是类只是一个模板。打印机也是如此。因此,只要您希望将它们实际用作类型,就必须提供模板参数来实例化类。这意味着std :: set :: const_iterator,Printer和Printer。