跟进:Enabling a static member conditionally without changing the member scope
我有一个静态类成员,当模板变量R
和C
相等时,它会有条件地启用。
现在我想要访问它而不必事先指定范围 - 就像任何直接的静态成员一样。
可以使用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
无法按预期工作。