我想更好地理解模板
我有一个模板类,在我的.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'在没有模板参数的情况下使用
如何传递模板参数?
答案 0 :(得分:0)
我相信它应该有用
CPLAT::CP_Application<CPLAT::CP_DocumentPolicy_None,CPLAT::CP_PrintPolicy_None,CPLAT::CP_UndoPolicy_None>::Init(d,p,u);
答案 1 :(得分:0)
您有 类模板 ,而不是“模板类”。它是一个可以生成类的模板。 (还有功能模板。这些是生成功能的模板。)
需要 类型参数 。 d
,p
和u
是(指向)对象的指针,而不是类型。例如,类型为CPLAT::CP_DocumentPolicy_None
,CPLAT::CP_PrintPolicy_None
和CPLAT::CP_UndoPolicy_None
所以你应该能够做到
CP_Application< CPLAT::CP_DocumentPolicy_None
, CPLAT::CP_PrintPolicy_None
, CPLAT::CP_UndoPolicy_None > app;
如果你有函数模板,其中模板参数也是函数参数(它们在函数的参数列表中显示为类型),你可以省略它们实例化模板时的实际模板参数列表:
template< typename T >
void f(T obj) {...}
...
f(42); // same as f<int>(42), because 42 is of type int
这是自动函数参数推导。
不必调用Init
成员函数,而是让构造函数初始化对象。