你会如何从结构中随机选择一条路径?
问题描述:
我想要做的是随机选择一个结构的成员。我会创建一个结构的实例,然后通过其成员的“路径”并到达最后一个成员。我将用它作为一个随机项目生成器。所以它会创建这样的东西:你会如何从结构中随机选择一条路径?
item new_item;
然后它会随机选择它有哪些成员。
new_item.item_class.part1.part2.end
请记住,该项目的部分将随机选择。我不知道如何实现这一点,并且我到处搜索了一个起点。
答
这在C++中是不可能的,除非您手动编写结构的描述以及遵循它们的函数。
换句话说,如果您自己手动实现,则只会获得此功能。 C++运行库不会保留所需的信息。
编辑:有些库可以帮助创建C++反射机制代码,通过模板和宏。尝试搜索“C++中的反射”。
答
这没有意义。 C++是一种静态类型语言,因此您必须在编译时确定要使用的类型。你不能在C++中选择“随机类型”,因此你不能引用“随机类成员”。
,你可以做是选择一个随机元素从诸如vector
或array
均匀容器(基本上是通过拾取随机指数)唯一明智的事情。
请注意,基类指针集合确实是一个同类集合,可用于处理异构对象集合,但它们都必须从相同类型派生。访客(使用动态强制转换)可用于处理实际的具体实例。也许,这可能是一个有用的方法,所以让我写一个例子:
struct Object { virtual ~Object() { } };
struct Foo : Object { /* ... */ };
struct Bar : Object { /* ... */ };
std::vector<std::unique_ptr<Object>> v;
// populate v, e.g. "v.emplace_back(new Bar);"
for (auto & p : v)
{
if (Foo * q = dynamic_cast<Foo*>(p.get())) { /* use q */ }
else if /* further cast attempts */
}
如果您还没有这样做的话,请阅读此线程:http://stackoverflow.com/questions/41453/how-can -i-增加反射到AC-应用 – kfmfe04 2012-02-18 01:03:36