动态类型解引用
Dynamic type dereferrencing?
在试图回答另一个问题时,我被一阵好奇心所吸引,想知道一个想法是否可行。
- 是否有可能动态地解引用一个void *指针(我们假设它指向一个有效的引用动态分配的副本)或其他类型在运行时返回正确的类型?是否有一些方法来存储提供的类型(如,类知道void *指向int),如果有,如何?
- 所述存储类型(如果可能)可以用于动态解引用吗?
- 可以将类型作为参数传递给函数吗?
一般来说,这个概念(没有可用的代码)是一个可以动态分配空间的void *指针(或类似指针)的双链表,这些指针还保留了它们所持有类型的副本,以便以后解引用。
1)动态引用
。与其让变量只保存指针,不如让它们保存一个结构体,该结构体既包含实际指针,又包含定义指针指向的类型的标签
struct Ref{
int tag;
void *ref;
};
,然后,当"解引用",首先检查标签,找出你想做什么。
2)将类型存储在变量中,传递给函数。
这实际上没有意义,因为类型不是可以存储的值。也许你只是想传递一个类/构造函数,这当然是可行的。
最后,C和c++是最基本的语言。虽然动态语言中的变量赋值看起来很像C中的变量赋值(毕竟它们只是一个
=
),但实际上动态语言在幕后做了很多额外的事情(允许这样做,因为新语言可以自由定义其语义)
对不起,由于缺乏类型反射和缺乏动态绑定,这在c++中是不可能的。由于这些原因,动态解引用尤其不可能。
您可以尝试通过将类型存储为枚举或std::type_info*
指针来模拟它的行为,但这些都是不切实际的。它们需要注册类型,并且每次你想对它们做一些事情时都需要大量的switch. case或if. else语句。一个通用的容器类和几个包装器类可能有助于实现它们(我肯定这是某种设计模式,知道它的名字吗?)
如果适合的话,你也可以使用继承来解决你的问题。
或者您需要重新考虑当前的设计。你到底要这个干什么?
相关文章:
- 强制转换为引用类型
- 自定义引用类型
- Java 中是否有类似于 C++ 中引用类型"&"的内容?
- 为什么我不能在运算符=中使用引用类型?
- 可变参数模板函数参数和引用类型推导
- 隐式可转换参数,但属于引用类型
- 如何告诉自动推断向量<bool>元素的非引用类型
- 为什么"const auto [x, y]"绑定到引用类型时没有按预期运行?
- 引用类型的数据成员提供有关恒常正确性"loophole"
- 为什么引用类型在使用临时对象访问时是左值
- 什么是常量指针常量引用类型的参数?(const X* const & p)
- 在 lambda 中从引用类型捕获的值的类型,不使用通用捕获
- 如果类在 C++ 中具有常量或引用类型的非静态数据成员,为什么编译器不提供默认赋值运算符?
- void*作为通用引用类型是如何工作的
- 强制转换为不相关的引用类型是否违反严格的别名规则?
- C++ 引用类型作为递归函数参数
- EXPECT_CALL具有 unique_ptr 引用类型参数的模拟函数
- 如果使用返回引用的函数初始化"auto"var,为什么它不声明引用类型?
- 为什么模板引用类型不能用作模板类型别名参数?
- 模板默认参数将丢失其引用类型