在类模板实例化中携带类型信息

时间:2015-09-07 08:21:50

标签: c++ templates generic-programming

我需要从我用来实例化另一个类的类中访问类型信息。

具体而言,void Beta<T>::do_something()需要接受用于实例化类W, S的{​​{1}}类型的参数。

Alpha<W, S>

上面的解决方案工作正常但有没有其他方法可以做到这一点,而不会将类型别名作为类成员?是否有更“C ++”的方式来做到这一点?

2 个答案:

答案 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 ++不允许这种捷径......