【发布时间】:2020-05-31 12:39:34
【问题描述】:
在 C++ 中有没有一种方法(或函数)可以创建在运行时确定的类型的指针。
例子:
有一个 Base 类型的指针 *ptr。
Base *ptr=new Base();
假设我们有一个函数getType 能够返回作为其参数传递的指针的类型。
getType(ptr) 返回指针的类型,以便我可以使用它来创建类似类型的指针,例如
getType(ptr) *newPtr=new getType(ptr)();.
C++ 中是否有这样做的?
【问题讨论】:
-
请记住,C++ 不仅是强类型的,而且是静态类型的:所有类型都必须在编译时可用且已知。根据您的问题,您可以通过标记结构/联合、
std::any或std::tuple(或它们的 Boost 等效项)或类似的类型双关或类型擦除技术来解决它。 -
我能想到的唯一方法是,如果您自己制作课程。具有基类和从基类继承的不同类。然后你可以有一个被每个子类型覆盖的
getType方法。但我认为这不是好习惯。 -
最接近
getType(ptr) *newPtr=new getType(ptr)();.的方法是实现您自己的继承类,如上所述。然后有一点 if / switch case 来查找它是哪种类型(有限数量的选项)。同样,不建议这样做。 -
运行时基本上没有类型,它们纯粹是编译时构造。运行时类型系统的唯一(有限)剩余部分是
virtual函数调度和一些类型信息。顺便说一句:你试图实现的东西被称为“工厂模式”。只需在网上搜索这些关键字即可了解更多信息。此外,这似乎是一个“xy 问题”,您正在询问实际问题的不可用解决方案。