如何让模板化类中的结构采用任何类型的模板参数?
How to get struct in templated class to take any type of template parameters?
>我得到了一个A类template<typename T1, typename T2> class A{...};
在这个班级中,我想有一个struct B {
(type of any of the parameters of A) m_type;
}
.这样我就可以有一个 B 与 m_tpye 的 T1 和一个 B 与 m_type 的 T2。这可能吗?
您可以使用联合:
template<typename T1, typename T2> class A {
struct B {
union {
T1 t1;
T2 t2;
} m_type;
};
};
但是,工会有严格的限制,在您的情况下可能不被接受,而且很容易被滥用。我建议改用类型安全的variant
类型。不幸的是,标准库中还没有这样的类型,因此您需要使用第三方实现,或者自己实现,或者尝试将提案N4542放入标准中。
我还建议您考虑是否真的需要具有具有不同类型的成员的B
类型的对象。
也许像下面的例子可以完成这项工作:
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所要求的那样。
相关文章:
- C++ 将 CIN 值存储到任何类型的数组中
- 对任何类型的元素数组进行排序
- 任何种类的分数 在任何类型的订单中
- C++ - 声明指向返回任何类型并获取任意数量参数的函数的指针
- 正则表达式以匹配数字的重复模式,后跟任何类型的分隔符?
- 检查模板中 nullptr 的函数指针,了解任何类型的可调用对象
- 如何制作可以接受任何类型的参数的 std::函数和 lambda
- 为自定义打印调试实现传递任何类型的变量
- 我的代码中是否有任何类型的错误,因为它没有给出正确的输出
- 如何在不给它任何类型(如整数)的情况下定义某物?
- 为什么我不能在不进行任何转换的情况下将浮点数放入任何类型的 ptr 中?
- C++如何使虚拟函数返回任何类型的指针
- 任何类型的缓存机制
- 如何在C++中接收任何类型的函数参数并获取函数内传递变量的类型?
- 如何在C++变量中存储任何类型的函数
- 将任何类型的表达式放在 c++ 的初始化列表中在语法上是否正确?
- 第一次捕获捕获任何类型的
- C++包含任何类型的模板类对象的映射
- 接受对任何类型的可变引用的 Lambda
- 将任何类型转换为任何类型