c++ - 从模板类继承会导致错误

标签 c++ templates inheritance compiler-errors

我有一个模板类 MyTemplate。它工作正常。但是,一旦我创建另一个派生自它的类,我就会出错。

//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 类型。但我希望它是 MyTemplate2。我可以进行显式转换,但这需要将第二个参数传递给模板类,似乎应该有更好的解决方案。有吗?

最佳答案

您尝试的只是将 Base*(即 this)传递给 Derived*,这是错误的方法.您需要显式转换才能执行此向下转换。

关于c++ - 从模板类继承会导致错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3481026/

相关文章:

c++ - C++模板打包参数

c++ - 为什么派生类不能访问非虚拟基类函数?

java - 从其内部类访问类对象

c++ - std::initializer_list 和 std::make_shared: 参数太多...预期 3 提供 0

c++ - 当用户输入字符而不是 float 和整数时如何避免无限循环?

c++ - boost::my_map_list_of

c++ - 可克隆类层次结构和 unique_ptr

c# - C++程序中引用C#库,其他PC不能

c++ - vk创建交换链KHR : internal drawable creation failed

c++ - 如何在 pre-C++11、C++11、14 和 17 中简化复杂的 SFINAE 语法?