在*.cpp文件中定义模板类指针

Typedef Template Class Pointer in*.cpp file

本文关键字:指针 定义 cpp 文件      更新时间:2023-10-16

在我的标题中,我得到了一个外部库模板的typedef以及一个函数,如:

#include "ExternalFancyLib.h"
class Fancy
{
public:
  //...
  typedef FancyClass<int , 3> FancyClassType;
  FancyClassType::Pointer FancyFunction ();
}

在我的*.cpp文件中我得到:

#include "Fancy.h"
FancyClassType::Pointer Fancy::FancyFunction()
{
  // do and return smth.
}

我一向友好的编译器告诉我,"::"后面必须跟一个类或命名空间,指的是FancyClassType。

有什么办法可以优雅地解决这个问题吗?

欢呼Usche

FancyClassType是在您的Fancy类中定义的,因此您也必须指定它:

Fancy::FancyClassType::Pointer Fancy::FancyFunction(){}

FancyClassType::Pointer使用当前作用域查找。在类定义中,这包括Fancy中的定义。在Cpp文件中,名称在全局作用域中解析,因此它将呈现::FancyClassType::Pointer(此处忽略名称空间)。

我有一种强烈的感觉,你的FancyClassType需要去代替FancyClass<int , 3>,你需要在使用你的typedef时参考Fancy::

cpp文件中的代码应该是这样的:
#include "Fancy.h"
Fancy::FancyClassType::Pointer Fancy::FancyFunction (){
// do and return smth
}

否则你实际上并没有调用你所创建的typedef

我能想到的另一种方法是将::Pointer添加到typedef中,你只需要调用

Fancy::FancyClassType Fancy::FancyFunction (){
    // do and return smth
    }
这是我能想出的最好的办法了。希望能有所帮助