如何使用类的属性作为模板参数/用于专业化?

时间:2014-12-01 19:13:09

标签: c++ templates

以下示例应说明我的问题:如果我有一个类作为模板参数,我该如何使用该类的(常量)属性...

  1. 直接,如标有(1)的行所示。我所知道的, 这应该工作。这是"对"方式是什么?

  2. 作为模板专业化的参数。因此,我想将其中一个Container专门用于固定,而另一个用于未修复。在这里,我不知道。

  3. 代码示例:

    class IdxTypeA{
      const bool fixed = true;
      const int LEN = 5; // len is fixed on compile time
    }
    
    class IdxTypeB{
      const bool fixed = false;
      int len; // len can be set on runtime
    }
    
    class IdxTypeC{
      const bool fixed = false;
      int len; // len can be set on runtime
    }
    
    template<class IDX> class Container { }
    
    template<>
    class Container<here comes the specialisation for fixed len>{
      int values[IDX.LEN]; // **** (1) *****
    }
    
    template<>
    class Container<here comes the specialisation for not fixed length>{
      ... 
    }
    

    (问题不在于容器,它只是粗略的例子。)

1 个答案:

答案 0 :(得分:1)

首先,您需要将编译时属性转换为实际的常量表达式,方法是static

class IdxTypeA {
  static const bool fixed = true;
  static const int LEN = 5; // len is fixed on compile time
}

有了这个,你可以(部分)专注于这些就好了,有点像这样:

template<class IDX, bool IS_FIXED = IDX::fixed> class Container;

template <class IDX>
class Container<IDX, true>
{
  int values[IDX::LEN];
};

template <class IDX>
class Container<IDX, false>
{
};