使用模板构造函数初始化成员

时间:2017-02-17 14:27:36

标签: c++ templates constructor

如果一个类包含一个只有模板化构造函数的成员,其模板参数不能自动推导出来,那么如何初始化它呢?例如,采用以下两种结构:

struct A {
  unsigned m_size;

  template<typename T>
  A() : m_size(sizeof(T)) {}
};

struct B {
    A m_sizeHolder;

    B() : m_sizeHolder<int>() {}             // error during compilation
    B(int) : template m_sizeHolder<int>() {} // error during compilation
};

int main()
{
  B b1{};
  B b2{1};
}

B的构造函数需要初始化A成员,但它只提供模板化构造函数。更复杂的是,我的用例涉及一个基于枚举的模板参数,据我所知,使用伪参数是不可能的:

enum class E {
  E1,
  E2
};

struct C {
  const E m_type;

  template<E e>
  C() : m_type(e) {}
};

struct D {
    C m_typeHolder;

    D() : m_typeHolder<E::E1>() {}             // error during compilation
    D(int) : template m_typeHolder<E::E2>() {} // error during compilation
};

int main()
{
  D d1{};
  D d2{1};
}

我目前正在瞄准C ++ 14,但也欢迎其他版本的答案。

0 个答案:

没有答案