【发布时间】:2019-07-30 20:40:17
【问题描述】:
我正在尝试创建一个具有如下条件成员的类(示例代码来说明问题):
template<bool b>
struct conditional_members {};
template<>
struct conditional_members<true>
{ int m; };
template<typename T, bool b>
struct my_class : public conditional_members<b>
{
T n;
// constructor for case when b is false
my_class(T n) : n(n) {};
// constructor for case when b is true
my_class(T n, int m) : n(n), m(m) {};
};
我需要有两个取决于bool b 的条件构造函数,但这不会编译。我尝试使用 bool 值专门构造构造函数:
template<typename T>
my_class<T, true>::my_class(T n, int m) : n(n), m(m) {};
template<typename T>
my_class<T, false>::my_class(T n) : n(n) {};
但这也不能编译,因为不允许部分函数模板特化。
有没有办法做到这一点?
【问题讨论】:
-
m不是成员,而是初始化基类。 -
你想通过这样的结构解决什么问题?
-
@Igor 当
b为真时,我相信m是继承成员 -
@NathanOliver 这是一小段代码来说明问题。
my_class会有其他成员函数,在某些情况下可能需要conditional_members,但并非总是如此。conditional_members的成员可能很大,所以我不想总是拥有它们,即使它们不使用。
标签: c++ templates template-meta-programming