测试了一段代码:
class Key{
public:
Key(){}
~Key(){
printf("dtor\n");
}
void Printf(){
printf("print key\n");
}
};
template<class T1,class T2>
struct my_pair{
my_pair():first(),second(){}
my_pair(const T1& t1,const T2&t2){
printf("ctor pair\n");
first=t1;
second=t2;
}
operator=(const my_pair &pair){
first=pair.first;
second=pair.second;
}
T1 first;
T2 second;
};
template<class T1,class T2>
my_pair<T1,T2> my_make_pair(const T1 &t1,const T2 &t2){
return my_pair<T1,T2>(t1,t2);
}
void test_pair(){
my_pair<Key,Key> pair(Key,Key());
pair.first.Printf();
}
int main(){
test_pair();
}
这个主要是模拟std::pair,在test_pair函数里,我觉的pair为什么非要调用make_pair呢,要进过多次构造复制内部的first和second。
void test_pair(){
std::pair<Key,Key> pair=std::make_pair(Key(),Key());
pair.first.Printf();
}
为什么不这样呢:
void test_pair(){
std::pair<Key,Key> pair(Key(),Key());
pair.first.Printf();
}
但是报错了:
request for member 'first' in 'pair', which is of
non-class type 'std::pair<Key, Key>(Key (*)(), Key (*)())'
按照[1]的说法,这是把Key()当函数用了。
当然这样改也是可以的,就不用std::make_pair了。
void test_pair(){
Key key1;
Key key2;
std::pair<Key,Key> pair(key1,key2);
pair.first.Printf();
}
网友评论