" Enable_if"结构数据menber

时间:2017-11-25 21:37:14

标签: c++ metaprogramming c++17 code-duplication

没有任何"清洁"写下面的方法(我的意思是重复代码少)?

template < bool condition >
class Test {

  struct Foo1 {

    int a;
  };

  struct Foo2 {

    int a;
    int b;
  };

  using type = std::conditional_t<condition, Foo1, Foo2>;
};

我想在这里做的就是启用或禁用结构的单个数据成员。如果我只需要一个结构,那就太好了。

类似的东西:

template < bool condition >
class Test {

  struct type {
    int a;
    if constexpr(condition)
      int b;
  };
};

1 个答案:

答案 0 :(得分:1)

我不知道这对你来说是否“干净”,但是......你可以用这种方式编写一个自动继承(某种)类.then(不幸的是,它可以完成但是在Foo}之外

Test

// common part template <bool> struct Foo { int a; }; // only when `Cond` is true template <> struct Foo<true> : public Foo<false> { int b; }; 成为

Test

以下是完整的编译示例

template <bool Cond>
struct Test
 { using type = Foo<Cond>; };