c++ template,函数名称为输入的情况下,编译出错

img

img

img

img

img

img

img

img

img

请问,要如何输入这个参数?

下面把代码贴上来

头文件中的声明
template <class DataType>https://img-mid.csdnimg.cn/release/static/image/mid/ask/999967185626110.png)
 
class Bihttps://img-mid.csdnimg.cn/release/static/image/mid/ask/345657185626173.png)
Tree: public CATBaseUnknown

源文件中的这几种形式编译都会出错
CATImplementClass(//BiTree,//编译信息:'BiTree' : use of class template requires template argument list
                  //BiTree<DataType>,//编译信息:'DataType' : undeclared identifier
                  //template <class DataType> BiTree<DataType>,//编译信息:error C2059: syntax error : ''template<''
                  //template <class DataType> DataType BiTree<DataType>,//编译信息:error C2059: syntax error : ''template<''
                  //BiTree<>,//编译信息:error C2976: 'BiTree' : too few template arguments
                  //BiTree<class DataType>,//编译信息:error C2906: 'CATMetaClass *BiTree<DataType>::MetaObject(void)' : explicit specialization requires 'template <>'
                  //BiTree<template <class DataType>>,//编译信息:error C2059: syntax error : ''template<''
                  //template <class DataType> BiTree,//编译信息:error C2059: syntax error : ''template<''

                  Implementation, 
                  CATBaseUnknown,
                  CATNull);

这是一种形式,也是会出错
template <class DataType> CATImplementClass(BiTree<DataType>,//编译信息:error C2065: 'DataType' : undeclared identifier
                                            Implementation, 
                                            CATBaseUnknown,
                                            CATNull);

这是一种形式,也是会出错
template <class DataType> CATImplementClass(DataType,//编译信息:error C2063: 'GetMetaObject' : not a function
                                            Implementation, 
                                            CATBaseUnknown,
                                            CATNull);

**再贴上文档中对参数的说明,这个输入的参数要求是class name
**

img

如果源文件是函数声明,这样改:

 
template <class DataType>
CATImplementClass(BiTree<DataType>,
        Implementation,
        CATBaseUnknown,
        CATNull);

c++的模板在编译期间会实例化成具体类型。在cpp文件里必需指明模板最终的类型。如果不能指明类型,需要放到头文件里的