在试图回答另一个问题时,我被一群好奇心所吸引,并想知道一个想法是否可行。
通常,概念(没有代码可用)是可以动态分配空间的void *指针(或类似)的双向链接列表,它还保留了它们为以后取消引用它们所持有的类型的副本。
答案 0 :(得分:1)
1)动态参考:
没有。让它们保持一个包含实际指针和标签的结构,而不是让你的变量仅包含指针,该结构定义指针指向的类型
struct Ref{
int tag;
void *ref;
};
然后,当“解除引用”时,首先检查标签以找出你想要做的事情。
2)在变量中存储类型,将它们传递给函数。
这实际上没有意义,因为类型不是可以存储的值。也许你想要的只是传递一个类/构造函数,这当然是可行的。
最后,C和C ++是一种简单的语言。虽然动态语言中的变量赋值看起来很像C中的变量赋值(毕竟它们只是=
)但实际上动态语言在幕后做了很多额外的事情(允许这样做)要做,因为新语言可以自由定义其语义)
答案 1 :(得分:1)
很抱歉,由于缺乏类型反射和缺乏动态绑定,这在C ++中实际上是不可能的。由于这些原因,动态解除引用尤其不可能。
您可以尝试通过将类型存储为枚举或std::type_info*
指针来模拟其行为,但这些远非实用。它们需要注册类型,并且每次要对它们执行某些操作时都需要大量的switch..case或if..else语句。一个常见的容器类和几个包装类可能有助于实现它们(我确定这是一些设计模式,任何名称的想法?)
如果适合,您也可以使用继承来解决问题。
或许您需要重新考虑当前的设计。你到底需要做什么?