具体地,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);}总结
以上是内存溢出为你收集整理的c – 在类模板实例化中携带类型信息全部内容,希望文章能够帮你解决c – 在类模板实例化中携带类型信息所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)