在 C++ 中创建"generic"结构
create "generic" structures in c++
我想在运行时定义的结构中创建一个结构,其中包含可以在父结构的函数中引用的变量。基本上,这个:
struct Bar
{
int val = 0;
}
struct Foo
{
struct *generic_struct;
Foo()
{
generic_struct = Bar;
generic_struct.val++;
}
}
int main()
{
Foo foo;
}
我知道指针不是这样做的,但我没有更好的方式来描述我的期望。我也从对C++的有限理解中意识到,可能没有办法做我想做的事,但最接近的事情是什么?
相当多的选项:
I。使用继承。
struct Struct {
virtual Struct &setVal(int) = 0;
virtual ~Struct() {}
};
struct Bar: Struct {
int val = 0;
Struct &setVal(int that) { val = that; return *this; }х
};
struct Foo {
std::unique_ptr<Struct> str;
Foo(): str(std::make_unique<Bar>()) {}
};
II。(有点像Python/javascripty。(使用映射。这样,只要你知道的集合,结构的字段可以属于所有可能的类型,它们就真的是运行时的。
template<typename... types> using Struct
= std::unordered_map<std::string, std::variant<types...>>;
auto bar() { return Struct<int, char, double>{{"val", 0}}; }
struct Foo {
Struct<int, char, double> generic_struct;
Foo(): generic_struct(bar()) {
++std::get<int>(generic_struct["val"]);
}
};
III。如果可以的话,将Foo
模板化。
template<typename Struct> struct Foo {
Struct generic_struct;
Foo() { ++generic_struct.val; }
};
(添加一些SFINAE,使所有结构访问都可以编译。(
其他可能更为复杂。
相关文章:
- 如何循环打印顶点结构
- 通过方法访问结构
- 使用不带参数的函数访问结构元素
- 预处理器:插入结构名称中的前一个行号
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 孤立代码块在结构中引发异常
- 有什么方法可以遍历结构吗
- 如何在 C# 中映射双 C 结构指针?
- 如何在C++中使用结构生成映射
- 无法将结构注册为增强几何体3D点
- 多成员Constexpr结构初始化
- C++将文本文件中的数据读取到结构数组中
- 如何重构类层次结构以避免菱形问题
- 如何在C++中序列化结构数据
- std::vector的包装器,使数组的结构看起来像结构的数组
- 没有为自己的结构调用列表推回方法
- 奇怪的结构&GCC&clang(void*返回类型)
- 在 c++ 中拥有一组结构的正确方法是什么?
- vscode g++链路故障:体系结构x86_64的未定义符号
- 在 C++ 中创建"generic"结构