which is of non-class type

2019-04-30  本文已影响0人  help_youself

 测试了一段代码:

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();
}

[1]which is of non-class type

上一篇下一篇

猜你喜欢

热点阅读