传递模板参数

时间:2010-08-13 16:49:20

标签: c++ templates compiler-errors

我想更好地理解模板

我有一个模板类,在我的.h:

中以这样的方式开始
template <class DOC_POLICY, class PRINT_POLICY, class UNDO_POLICY>
class CP_EXPORT CP_Application : public CP_Application_Imp

现在我需要在我的.cpp中初始化所以我这样做:

CPLAT::CP_DocumentPolicy_None * d = new CPLAT::CP_DocumentPolicy_None();
CPLAT::CP_PrintPolicy_None * p = new CPLAT::CP_PrintPolicy_None();
CPLAT::CP_UndoPolicy_None * u = new CPLAT::CP_UndoPolicy_None();

CPLAT::CP_Application::Init(d, p, u);

我在CPLAT :: CP_Application :: Init(d,p,u)上收到错误;声明:

错误:'模板类CPLAT :: CP_Application'在没有模板参数的情况下使用

如何传递模板参数?

2 个答案:

答案 0 :(得分:0)

我相信它应该有用

CPLAT::CP_Application<CPLAT::CP_DocumentPolicy_None,CPLAT::CP_PrintPolicy_None,CPLAT::CP_UndoPolicy_None>::Init(d,p,u);

答案 1 :(得分:0)

  1. 您有 类模板 ,而不是“模板类”。它是一个可以生成类的模板。 (还有功能模板。这些是生成功能的模板。)

  2. 需要 类型参数 dpu是(指向)对象的指针,而不是类型。例如,类型为CPLAT::CP_DocumentPolicy_NoneCPLAT::CP_PrintPolicy_NoneCPLAT::CP_UndoPolicy_None 所以你应该能够做到

    CP_Application< CPLAT::CP_DocumentPolicy_None
                  , CPLAT::CP_PrintPolicy_None
                  , CPLAT::CP_UndoPolicy_None > app;
    
  3. 如果你有函数模板,其中模板参数也是函数参数(它们在函数的参数列表中显示为类型),你可以省略它们实例化模板时的实际模板参数列表:

    template< typename T >
    void f(T obj) {...}
    ...
    f(42); // same as f<int>(42), because 42 is of type int
    

    这是自动函数参数推导。

  4. 不必调用Init成员函数,而是让构造函数初始化对象。