返回在非类型模板类中定义的typedef

时间:2013-07-31 20:03:45

标签: c++ class templates typedef non-type

我正在寻找创建一个非类型的模板化类,其成员变量依赖于非类型参数(特别是固定维度的特征矩阵,但问题也出现在int中)。为了使事情更清楚,我输入了成员类型,这非常有效,直到我想要一个成员函数返回 typedef,此时我开始收到以下错误:

  

myClass.cpp:10:错误:'myClass'之前的预期构造函数,析构函数或类型转换

至少在概念上我理解这与我的typedef依赖于模板这一事实有关,因此C ++很困惑。问题是我更加困惑,我尝试了一些typename的天真插入,但这并没有解决任何问题。

最低限度的工作示例。

部首:

template <int i> class myClass
{
  public:
    typedef int myVector_t;

    myClass();
    myVector_t myFunc();
};

源代码:

#include <myClass.hpp>

template <int i>
myClass<i>::myClass()
{
  //blah
}

template <int i>
myClass<i>::myVector_t  myClass<i>::myFunc()        //<----- Line 10
{
  //blah
}

我很感激任何见解。

编辑:回答

如下所述,解决方案是在实现中包含typename关键字,但声明。

typename myClass<i>::myVector_t  myClass<i>::myFunc()        //<----- Line 10

EDIT2

将问题从特征

推广出来

1 个答案:

答案 0 :(得分:5)

由于函数定义中的名称myVector_t实际上取决于模板参数,因此您需要让编译器知道它是typename的类型:

template <int i>
typename myClass<i>::myVector_t  myClass<i>::myFunc()        //<----- Line 10
{
  //blah
}