我得到了一个A级template<typename T1, typename T2> class A{...};
在这堂课中,我希望有一个struct B {
(type of any of the parameters of A) m_type;
}
。这样我就可以得到一个带有m_tpye为T1的B和一个带有m_type为T2的B。这可能吗?
答案 0 :(得分:1)
您可以使用联合:
template<typename T1, typename T2> class A {
struct B {
union {
T1 t1;
T2 t2;
} m_type;
};
};
但是,工会有严格的限制,在您的情况下可能是不可接受的,并且很容易被滥用。我建议使用类型安全的variant
类型。遗憾的是,标准库中还没有这样的类型,因此您需要使用第三方实现,或者自己实现,或者尝试将提议N4542纳入标准。
我还建议您考虑是否确实需要具有B
类型的对象,这些对象具有不同类型的成员。
答案 1 :(得分:0)
也许类似下面的例子可以完成这项工作:
template<typename... T>
struct B: T... { };
template<typename T1, typename T2>
struct A{
B<T1,T2> b;
};
struct S1 { };
struct S2 { };
void f1(const S1&) { }
void f2(const S2&) { }
int main() {
A<S1, S2> a;
f1(a.b);
f2(a.b);
}
此处B
继承自S1
和S2
,因此实际上 两者都是OP的请求。