模板成员变量类似泛型函数

时间:2017-09-02 14:20:38

标签: c++ templates generics member

想象一个像

这样的课程
class A 
{
  public:
    template <bool S>
    A(X<S> x) : x(x) { }

 private:
    X<S> x;
}

通过参数推导,A类的构造函数可以推导出S的值。例如:

void f() {
  X<true> x;
  A a(x);
}

问题是私有成员x对S没有任何了解。有没有办法将S的值“传递”给成员变量?

非常感谢

1 个答案:

答案 0 :(得分:1)

静态类型class A可以依赖于其成员类型中的S之类的唯一方法是,如果它是模板化的那样:

template<bool S>
class A 
{
  public:
    A(X<S> x) : x(x) { }

 private:
    X<S> x;
};

虽然f中的类型需要A<true>,但在C ++ 17中我们可以像以前一样简洁:

void f() {
  X<true> x;
  A a(x);
}