在类模板实例化中携带类型信息
Carrying type information in class template instantiation
我需要访问用于实例化另一个类的类的类型信息。
具体来说,void Beta<T>::do_something()
需要接受用于实例化Alpha<W, S>
类的W, S
类型的参数。
template<typename W, S>
class Alpha {
public:
using carry_W = W;
using carry_S = S;
};
template<typename T>
class Beta {};
template<typename T>
void Beta<T>::do_something(typename T::carry_W p1, typename T::carry_S p2) {}
Beta<Alpha<int, double>> b;
上面的解决方案工作得很好,但是有没有其他方法可以做到这一点,而不将类型作为类成员别名?是否有更"c++"的方式来做到这一点?
您可以创建一个仅由前向声明和部分专门化组成的类模板。
#include <iostream>
using namespace std;
template<typename W, typename S>
class Alpha {
};
template<typename>
class Beta;
template<typename W, typename S, template<typename, typename> class T>
class Beta<T<W,S>> {
public:
void do_something(W w, S s) {
cout << w << ", " << s << 'n';
}
};
int main() {
Beta<Alpha<int, double>> b;
b.do_something(0, 0.0);
}
你的意思是像下面这样(模板'模式匹配')吗?
template<typename T<W, S>>
void Beta<T>::do_something(W, S) {...}
虽然我认为你的问题是完全合法的,但我担心当前的c++不允许这种快捷方式…
相关文章:
- Keil armcc 生成类型信息名称,即使使用 --no_rtti_data
- 错误:未定义对"静脉类型信息::电池访问"的引用
- 如何在编译过程中输出C 类型信息
- 如何在C 中检查确切的类型信息(具有CV-REF-POIRT特征)
- 共享库中非模板基的模板子类导致未定义的符号类型信息'class'链接错误
- 为什么C++不使用集中存储类型信息以实现高效的 RTTI
- 给定DDS主题名称,可以在运行时确定主题类型信息
- 使用友元函数从多态类中检索类型信息
- 如何在函数模板中隐式推导数组中元素的类型信息
- 使用标准类型的动态类型信息实例化标识符
- 超载功能没有上下文类型信息
- 对"vtable for "命名空间继承的未定义引用 对"类型信息"的未定义引用
- 多映射插入键类型信息 std::make_pair vs std::p air 构造函数
- Visual Studio-使用PDB进行调试,但缺少类型信息
- 如何在不同的上下文(例如线程)中保留原始异常类型信息
- C++正在传输运行时条件类型信息
- C++虚拟表上的虚拟定义器和类的类型信息
- C++测试宏定义的类型信息值
- 编译器不可知的运行时类型信息
- C++类型信息