我想在运行时定义的结构中创建一个结构,并在父结构的函数中引用变量。基本上,这是:
struct Bar
{
int val = 0;
}
struct Foo
{
struct *generic_struct;
Foo()
{
generic_struct = Bar;
generic_struct.val++;
}
}
int main()
{
Foo foo;
}
字符串
我知道这不是指针的作用,但我没有更好的方法来描述我所期望的。我也从我对C++有限的理解中认识到,可能没有办法做我想要的,但什么是最好的最接近的东西?
2条答案
按热度按时间qltillow1#
相当多的选择:
I.使用继承。
字符串
II.(有点像Python/javascripty。)使用Map。如果你知道struct的字段可以属于 * 所有可能的 * 类型的集合,那么它们就真的是运行时的。
型
如果可以的话,将
Foo
模板化。型
(Add一些SFINAE来使所有的结构访问编译。)
其他人可能更复杂。
mi7gmzs62#
如果我理解正确的话,您希望能够在运行时定义一个新的结构,其中的成员在编译时可能是未知的,并且仍然能够引用新创建的结构的成员和函数。最终用户可以在运行时创建新的自定义类,系统将允许他们像任何其他包含/编译的类一样使用。2而且,当时我用的是C#,不是C++。
我不得不学习创建该功能的系统非常复杂,而且我还没有使用C实现。在C#中,您将使用Reflection命名空间。C有一个名为运行时类型反射(RTTR)的开源库,它仍然被认为是“实验性的”,您可能希望研究一下。就像我说的,复杂,而且我真的不能声称自己对C库有任何了解。
如果这听起来像你正在寻找的,这里是到RTTR主页的链接:
Run Time Type Reflection Library Home Page的一个。
我相信这是一个独立的、不相关的解决方案,但在CppReference.com上有一个“Reflection Technical Specification”的文档,它“指定了对核心语言的修改,并为本页上列出的C标准库定义了新组件”。因此,它似乎是标准库的扩展,而不是一个独立的库。
下面是一些示例Reflection TS: reflexpr keyword和扩展名Standard Library Reflection Extensions的定义。