如果一个类包含一个只有模板化构造函数的成员,其模板参数不能自动推导出来,那么如何初始化它呢?例如,采用以下两种结构:
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,但也欢迎其他版本的答案。