【问题标题】:Is it possible to exclude template member variables by conditions on template arguments?是否可以通过模板参数的条件排除模板成员变量?
【发布时间】:2015-11-30 14:22:15
【问题描述】:

我目前正在编写一个应该根据模板参数专门化的类。

我现在想知道是否可以根据数字模板参数是否大于 X 来更准确地忽略特定专业化的某些成员变量。

例如:

template<int N>
class Test
{
   int a;
   int b;
}

template<N > X>
class Test
{
  int a;
}

我正在考虑使用 std::conditional ,但这似乎导致至少选择了一种类型。我当然可以使用 D-Pointer 方法和 std::conditional 并将特化放入指向的不同对象中,但我想知道是否有更好的方法。

我看到的另一种方法是使用抽象基类并有两个实现,一个用于 N = X,但我不确定这会更好。

【问题讨论】:

  • std::conditional 的具体问题是什么?
  • 这看起来有点像XY problem。你想用这个模型做什么?
  • 我试图根据对类的要求更有效地在两种或多种不同的实现类的方法之间进行选择。所以说当 N 小于 4 时方法 X 会更有效,否则方法 Y 会更有效。但是这些方法有不同的成员变量要求。

标签: c++ templates conditional opaque-pointers


【解决方案1】:

只需使用SFINAE。

template<int N, typename = void>
class Test
{
   int a;
   int b;
};

template<int N>
class Test<N, typename std::enable_if<(N > X)>::type>
{
  int a;
};

【讨论】:

    猜你喜欢
    • 2017-02-28
    • 2014-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多