gpt4 book ai didi

c++ - 在 C++ 中从派生到模板化​​基础的向上转换

转载 作者:行者123 更新时间:2023-11-30 04:28:45 25 4
gpt4 key购买 nike

<分区>

编辑:

我意识到这段代码可以编译并工作:

#include <iostream>

template<class Something> class Base {
public:
Base() {

}

virtual ~Base() {
}

virtual void method() = 0;
};

class Derived: public Base<std::string> {
public:
Derived() {

}

virtual ~Derived() {

}

void method() {
}
};

template<class Something> class TemplatedClass {
public:
void method(Base<Something>* base) {
}
};

class SomeClass: public TemplatedClass<std::string> {
};

int main(int argc, char **argv) {

Derived* d = new Derived();

Base<std::string>* b = d;
Base<std::string>* b1 = dynamic_cast<Base<std::string>*>(d);
Base<std::string>* b2 = static_cast<Base<std::string>*>(d);

SomeClass sc;
sc.method(b);
sc.method(b1);
sc.method(b2);
}

然后,我在准备框架或什至试图理解我自己的代码时犯了一个非常大的错误。真丢脸!!!对不起...这是一个非常糟糕的问题。最好去掉它...

** 没有意义的问题和下面的代码 **鉴于此:

template<class Something> class Base
{
virtual void method() = 0;
};

class Derived: public Base<std::string>
{
void method() { ... };
};

我想将 Derived 的指针向下转换为 Base 的指针。我尝试使用 dynamic_cast 但没有成功:

...
Derived* d = new Derived();
Base* b = dynamic_cast<Base*>(d);
...

我在执行过程中总是出错。

不知道要不要垂头丧气,。我有这种情况:

template<class Something> class TemplatedClass
{
void method(Base<Something>* base) { ... };
};

class SomeClass : public TemplatedClass<std::string> { ... };

我想调用(已编辑*):

Derived* d = new Derived();

SomeClass sc;
sc.method(d);

但它给我一个转换错误。

我需要什么?沮丧还是什么?

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com