动态类型解引用

Dynamic type dereferrencing?

本文关键字:引用 类型 动态      更新时间:2023-10-16

在试图回答另一个问题时,我被一阵好奇心所吸引,想知道一个想法是否可行。

    是否有可能动态地解引用一个void *指针(我们假设它指向一个有效的引用动态分配的副本)或其他类型在运行时返回正确的类型?是否有一些方法来存储提供的类型(如,类知道void *指向int),如果有,如何?
  • 所述存储类型(如果可能)可以用于动态解引用吗?
  • 可以将类型作为参数传递给函数吗?

一般来说,这个概念(没有可用的代码)是一个可以动态分配空间的void *指针(或类似指针)的双链表,这些指针还保留了它们所持有类型的副本,以便以后解引用。

1)动态引用

。与其让变量只保存指针,不如让它们保存一个结构体,该结构体既包含实际指针,又包含定义指针指向的类型的标签

struct Ref{
    int tag;
    void *ref;
};

,然后,当"解引用",首先检查标签,找出你想做什么。


2)将类型存储在变量中,传递给函数。

这实际上没有意义,因为类型不是可以存储的值。也许你只是想传递一个类/构造函数,这当然是可行的。


最后,C和c++是最基本的语言。虽然动态语言中的变量赋值看起来很像C中的变量赋值(毕竟它们只是一个=),但实际上动态语言在幕后做了很多额外的事情(允许这样做,因为新语言可以自由定义其语义)

对不起,由于缺乏类型反射和缺乏动态绑定,这在c++中是不可能的。由于这些原因,动态解引用尤其不可能。

您可以尝试通过将类型存储为枚举或std::type_info*指针来模拟它的行为,但这些都是不切实际的。它们需要注册类型,并且每次你想对它们做一些事情时都需要大量的switch. case或if. else语句。一个通用的容器类和几个包装器类可能有助于实现它们(我肯定这是某种设计模式,知道它的名字吗?)

如果适合的话,你也可以使用继承来解决你的问题。

或者您需要重新考虑当前的设计。你到底要这个干什么?