加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 07:13:35 所属栏目:百科 来源:网络整理
导读:我需要从我用来实例化另一个类的类中访问类型信息. 具体地,void Beta T :: do_something()需要接受用于实例化类Alpha W,S的类型W,S的参数. templatetypename W,S class Alpha {public: using carry_W = W; using carry_S = S;};templatetypename T class Bet
我需要从我用来实例化另一个类的类中访问类型信息.

具体地,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);
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读