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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |