根据模板参数可选的静态类成员

时间:2017-07-05 06:58:11

标签: c++ templates

想象两个类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>;

1 个答案:

答案 0 :(得分:2)

  

是否可以将模板类Foo分解出来以避免代码重复?

“否”

不幸的是static没有被noexcept这样的表达式参数化,所以你不能说static(false)之类的内容。

如果不使用宏,您将被迫专门化一个模板,以便您可以在专业化中拥有static个成员:

template<bool = false>
class Foo{
   void bar();
   int v;
};
template<>
class Foo<true>{
   static void bar();
   static int v;
};