想象两个类StaticFooNonStaticFoo,它们是相同的,除了类成员在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;
};

07-26 09:35