我试图从派生类模板访问基类中的typedef成员。在模板中,模板参数的名称与基类中的typdef的名称相同。

#include <iostream>

using namespace std;
class no {
    public :
    typedef int T;
};
template<typename T> class no1 : public no {
    public :
    T obj;
};
int main() {
    // your code goes here
    no1<string> o ; o.obj = "1";
    return 0;
}

14:24: error: invalid conversion from 'const char*' to 'no::T {aka int}' [-fpermissive]
  no1<string> o ; o.obj = "1";

在上面的代码T中,obj始终是int类型。如何强制obj为模板参数,而不是在基类中声明typdef?

谢谢

最佳答案

这对我有用:

template<typename T> class no1;
template<typename T>
struct underlying_type_of;

template<typename T>
struct underlying_type_of<no1<T> >
{
   typedef T type;
};
template<typename T> class no1 : public no {
public :
  typename underlying_type_of<no1>::type obj;
};

关于c++ - 在派生类模板中访问基类typedef,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33484694/

10-11 00:54