我需要从我用来实例化另一个类的类中访问类型信息。
具体而言,void Beta<T>::do_something()
需要接受用于实例化类W, S
的{{1}}类型的参数。
Alpha<W, S>
上面的解决方案工作正常但有没有其他方法可以做到这一点,而不会将类型别名作为类成员?是否有更“C ++”的方式来做到这一点?
答案 0 :(得分:1)
您可以创建仅包含前向声明和部分特化的类模板。
#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);
}
答案 1 :(得分:0)
您的意思是以下内容(模板&#39;模式匹配&#39;)?
template<typename T<W, S>>
void Beta<T>::do_something(W, S) {...}
虽然我认为你的问题完全合法,但我担心当前的C ++不允许这种捷径......