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

C,在std :: pair中模板化T

发布时间:2020-12-16 09:40:00 所属栏目:百科 来源:网络整理
导读:我想使用以下结构模板化“第一”类型的std :: pair template typename Tstruct TPair{typedef std::pair T,short Type;}; 并创建这样的对的向量. template typename Tstruct TPairs{typedef std::vector TPair T Type;}; 但是这个代码似乎被搞砸了,但是很不
我想使用以下结构模板化“第一”类型的std :: pair

template <typename T>
struct TPair
{
typedef std::pair <T,short> Type;
};

并创建这样的对的向量.

template <typename T>
struct TPairs
{
typedef std::vector <TPair <T> > Type;
};

但是这个代码似乎被搞砸了,但是很不舒服:

TPair <double> ::Type my_pair (1.0,0 ); //Create pairs
TPair <double> my_pair2 (1.0,0 ); //Create object,needs a constructor

TPairs <double> ::Type pairs; //Create vector
TPairs <double> pairs2; //Create object

pairs.push_back(my_pair); //Need a constructor
pairs2.push_back(my_pair); //No push_back method for the structure...
....

有没有更简单舒适的解决方案?

解决方法

template <typename T>
struct TPairs
{
  typedef std::vector <TPair <T> > Type;
};

这里有一个问题:你正在创建一个TPair< T>向量的类型,这实际上不是你想要的.你想要一个TPair< T> :: Type的向量.

template <typename T>
struct TPairs
{
  typedef std::vector <typename TPair <T>::Type > Type;
};

至于你的用例,请记住你创建的那两个结构只是为了模拟一个模板typedef,你根本不应该实例化它们,只需使用它们的Type成员typedef.所以:

TPair <double> ::Type my_pair (1.0,0 ); // Good,creates a std::pair
TPair <double> my_pair2 (1.0,0 ); // Not good,does not create an std::pair


TPairs <double> ::Type pairs; //Good,creates a vector
TPairs <double> pairs2;       //Not good,doesn't create a vector

pairs.push_back(my_pair);   // Ok,does what you mean
pairs2.push_back(my_pair);  // Can't compile,the `TPairs` struct ins't a vector

(编辑:李大同)

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

    推荐文章
      热点阅读