想象两个类StaticFoo
和NonStaticFoo
,它们是相同的,除了类成员在StaticFoo
中是静态的,而在NonStaticFoo
中不是静态的。
简单的例子:
class StaticFoo {
static void bar();
static int v;
};
class NonStaticFoo {
void bar();
int v;
};
是否可以排除模板类
Foo
以避免代码重复?这样一来,人们就可以使用类似
using StaticFoo = Foo<true>;
using NonStaticFoo = Foo<false>;
最佳答案
“没有”
不幸的是static
没有像noexcept
这样的表达式来参数化,因此您不能说像static(false)
这样的东西。
在不使用宏的情况下,您不得不对模板进行专用化,以便可以在专用化中使用static
成员:
template<bool = false>
class Foo{
void bar();
int v;
};
template<>
class Foo<true>{
static void bar();
static int v;
};