美文网首页
which is of non-class type

which is of non-class type

作者: help_youself | 来源:发表于2019-04-30 17:35 被阅读0次

     测试了一段代码:

    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

    相关文章

      网友评论

          本文标题:which is of non-class type

          本文链接:https://www.haomeiwen.com/subject/oiyvnqtx.html