在C++中从衍生碱基向模板碱基上转换
upcasting from derived to templated base in C++
编辑:
我意识到这段代码可以编译并工作:
#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);
但它给了我一个转换错误。
我需要什么?下行还是什么?
假设您的测试实际上是这样的?
Base<std::string>* b = dynamic_cast<Base<std::string> *>(d);
即它必须是实例化模板的强制转换,而不是没有类型参数的Base
。
等一下——你正在做的是从基础派生!
Base<std::string>* b = d;
那应该没问题!
你的第二个例子看起来不对——特别是:
SomeClass sc();
应该是:
SomeClass sc;
你能公布真实的代码和确切的错误信息吗?
相关文章:
- 防止主数据类型C++的隐式转换
- 模板参数替换失败,并且未完成隐式转换
- 努力将整数转换为链表。不知道我在这里做错了什么
- HEX值到wchar_t字符(UTF-8)的转换
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将 Qvector<uint8_t> 转换为 QString
- 如何在cuSparse中使用cusparseXcoo2csr从coo转换为csc
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- 在c++中使用nlohmann从类到json的转换
- 从"int*"强制转换为"unsigned int"会丢失精度错误
- 将Integer转换为4字节的unsined字符矢量(按大端字节顺序)
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 如何使用OpenCV将RBG图像转换为HSV,并将H、S和V值保存为C++中的3个独立图像
- 复制列表初始化的隐式转换的等级是多少
- 正在将指针转换为范围
- 如何防止 c++ 在从浮点型转换为双精度型(不适用于 IO)时添加额外的小数?
- 将"打开的CV图像"中的"颜色"转换为整数格式
- 是否可以从int转换为enum类类型
- 了解 GLM- openGL 中的相机转换
- 将无符号char*转换为std::istream*C++