从另一个部分专用的模板类继承部分专用的模板类

时间:2018-03-05 11:04:18

标签: c++ c++11

我正在尝试从另一个部分专用的模板类继承一个部分专用的模板类。我真的很感激,如果有人能解释什么是问题。

示例:

template<typename T, typename U>
class Base
{
public:
    int i;
    Base(int _i) : i{_i}
    {}
};

template<typename T, typename U>
class Derived: public Base<T, U>
{
public:
    Derived(int _i) :Base<T, U>{_i}
    {}
};

template<typename U>
class Base<int, U>
{
public:
    int i ;
    Base<int, U>(int _i)
    :i{_i}
    {}
};


template<typename U>
class Derived<int, U>: public Base<int, U>
{
public:
    Derived(int _i)
    : Base<int, U>{_i}
    {}
    void print_i()
    {
        std::cout << i << std::endl;
    }

};

int main()
{
    Derived<int, bool> X(10);
    X.print_i();

    return 0;
}

期望:我希望我可以从相同类型的Derived类成员函数访问Base类成员变量。

当前输出:编译时错误说:使用未声明的标识符&#39; i&#39;

1 个答案:

答案 0 :(得分:2)

这是因为编译器不会在依赖基类中查找名称(比如模板,这取决于它们实例化的类型)。

你能做些什么来解决它?

  1. 使用仅this->i

  2. i内容
  3. 使用i

  4. 访问Base<int, U>::i
  5. 在访问该成员之前插入using Base<int, U>::member_namecoliru上我没有为我的数据成员工作)

  6. 您可以找到其他信息here