代码之家  ›  专栏  ›  技术社区  ›  Ponkadoodle

从模板类继承会导致错误

  •  0
  • Ponkadoodle  · 技术社区  · 14 年前

    //main.cpp
    template <typename T> class MyTemplate {
        public:
            T* test() {
                return new T(this); //error here.
            }
    };
    
    template <typename T> class MyTemplate2 : public MyTemplate<T> { 
    };
    
    class MyClass {
        public:
            MyClass(MyTemplate2<MyClass>* source) {
            }
    };
    
    int main() {
        MyTemplate2<MyClass>().test();
        return 0;
    }
    

    main.cpp|4|error: invalid conversion from 'MyTemplate<MyClass>* const' to 'MyTemplate2<MyClass>*'

    据我所知,MyTemplate中的“this”属于MyTemplate类型。但我希望它是我的模板2。我可以执行显式强制转换,但这需要向template类传递第二个参数,似乎应该有更好的解决方案。有?

    2 回复  |  直到 14 年前
        1
  •  3
  •   Johannes Schaub - litb    14 年前

    你只是想通过考试 Base* (这是 this )到 Derived* ,这是错误的方法。您需要显式强制转换来执行此向下转换。

        2
  •  0
  •   Chubsdad    14 年前

    template <typename T> class MyTemplate { 
        public: 
            T* test() { 
                return clone(); //error here. 
            } 
            virtual T *clone() = 0;
    }; 
    
    template <typename T> class MyTemplate2 : public MyTemplate<T> {  
        public:
            T *clone(){return new T(this);}
    }; 
    
    class MyClass { 
        public: 
            MyClass(MyTemplate2<MyClass>* source) { 
            } 
    }; 
    
    int main() { 
        MyTemplate2<MyClass>().test(); 
        return 0; 
    }