C++函数解析基类指针到派生类指针
C++ function resolving base class pointer to derived class pointer
我尝试在考试题目中使用指针实现类似于JSON
的东西,结果我得到了一个我不知道如何解决的错误。
我有这些类(省略实现,因为我认为这对我的错误并不重要(:
struct JSON_BaseObject;
template<typename J_Type>
struct JSON_Value : public JSON_BaseObject;
struct JSON_String : public JSON_Value<std::string>;
struct JSON_Number : public JSON_Value<double>;
struct JSON_Null : public JSON_BaseObject;
using JSON_Children = std::map<std::string, JSON_BaseObject*>;
using JSON_Object = JSON_Value<JSON_Children>;
我想使用JSON_Object
中JSON_BaseObject*
类型的子级作为对这些派生类型具有不同重载的函数的参数,因此我创建了这些函数,并希望它们能将JSON_BaseObject*
解析为相应的类(指针(:
void print(JSON_Null*, std::ostream& os);
void print(JSON_String* str, std::ostream& os);
void print(JSON_Number* number, std::ostream& os);
void print(JSON_Object* object, std::ostream& os);
当我运行它时,我收到一个运行时错误,程序无法找到函数print(JSON_BaseObject*, std::ostream&)
,我意识到我并不像我想象的那么擅长 c++。
问题1
是否可以以某种方式从基类解析指针类型参数?
问题2
我怎样才能让它变得不错,例如在不知道obj
的派生类的情况下开始使用print(obj, os);
?
在尝试了访问者模式后,我意识到它解决了我所有的问题。它还以简单的方式解析基指针。
它启用了这样的漂亮代码:
int main()
{
JSON_Object obj = JSON_Object();
JSON_String str = JSON_String("I am a string!");
std::vector<JSON_Base*> basePtrs
{
&obj,
&str
};
Printer printer;
for (auto json : basePtrs)
{
json->PrintMe(printer);
}
}
相关文章:
- 为什么使用 "this" 指针调用派生成员函数?
- 如何使用基类指针引用派生类成员
- 使用基类指针创建对象时,缺少派生类析构函数
- 有没有一种"cleaner"的方法可以在指向基的指针向量中找到派生类的第一个实例?
- 如果基类包含双指针成员,则派生类的构造函数
- 如何在不使用指针的情况下将派生类的对象作为参数传递给基类中的函数?
- 如何在工厂方法中返回指向基于基础操作系统的派生类的有效指针
- 指向基类派生类的 std::unique_ptr 的指针
- 当我在 C++ 中将派生类的指针分配给指针时,地址会更改
- 从基指针到派生的强制转换问题
- 派生类是从基类继承 v 指针并仅使用它,还是也有自己的 v 指针?
- 从纯虚拟类 (A) 派生的指针无法访问来自纯类 (B) 的重载方法
- 如何模板化堆栈分配的多态指针数组到接口,包括派生类型的相应点?
- 从基类指针派生派生类的模板类型
- 指向从指针派生类成员函数的指针,指向基类成员函数
- 访问通过指针派生的类
- 如果未使用虚拟函数,则使用基类指针派生类的任何目的
- 从基指针C++派生类的类型
- 无法从指针派生类转换为指针基类(多态性)
- C++ - 传递智能指针派生类