访问继承的静态成员而不指定范围

时间:2016-07-24 13:50:45

标签: c++ templates c++11 inheritance scope

  

跟进:Enabling a static member conditionally without changing the member scope

我有一个静态类成员,当模板变量RC相等时,它会有条件地启用。

现在我想要访问它而不必事先指定范围 - 就像任何直接的静态成员一样。

可以使用using A::variable;语句将变量拉入派生类范围。但由于变量不适用于所有Foo类型,因此R != C时此使用声明将失败。

struct EmptyBase { };
template<int R, int C> class Foo;

template<int R, int C>
class _Foo_Square
{
public:
    static Foo<R, C> ID;
};

template<int R, int C>
class Foo : public std::conditional<R == C, _Foo_Square<R, C>, EmptyBase>::type
{
public:
    static Foo SECOND;
    /* other members and functions */

    void A()
    {
        Foo a = ID; //error because of inheritance
        Foo b = Foo<R, C>::ID; //works

        Foo test = SECOND; //works everytime
    };
};

int main()
{
    Foo<3, 3> foo;
    foo.A();
}

直接在成员函数中访问ID无法按预期工作。

0 个答案:

没有答案