gpt4 book ai didi

c++ - C++ 中的最小反射

转载 作者:搜寻专家 更新时间:2023-10-31 00:22:07 26 4
gpt4 key购买 nike

我想创建一个类工厂,我想为此使用反射。我只需要使用给定的字符串创建一个对象并仅调用少数已知方法。

我该怎么做?

最佳答案

你必须自己动手。通常你有一个字符串映射到对象创建函数。
您将需要类似以下内容:

class thing {...};
/*
class thing_A : public thing {...};
class thing_B : public thing {...};
class thing_C : public thing {...};
*/

std::shared_ptr<thing> create_thing_A();
std::shared_ptr<thing> create_thing_C();
std::shared_ptr<thing> create_thing_D();

namespace {
typedef std::shared_ptr<thing> (*create_func)();

typedef std::map<std::string,create_func> creation_map;
typedef creation_map::value_type creation_map_entry;
const creation_map_entry creation_map_entries[] = { {"A", create_thing_A}
, {"B", create_thing_B}
, {"C", create_thing_C} };
const creation_map creation_funcs(
creation_map_entries,
creation_map_entries + sizeof(creation_map_entries)
/ sizeof(creation_map_entries[0] );
}

std::shared_ptr<thing> create_thing(const std::string& type)
{
const creation_ma::const_iterator it = creation_map.find(type);
if( it == creation_map.end() ) {
throw "Dooh!"; // or return NULL or whatever suits you
}
return it->second();
}

还有其他方法可以做到这一点(比如 a map of strings to objects from which to clone ),但我认为它们都归结为将字符串映射到与特定类型相关的事物。

关于c++ - C++ 中的最小反射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3665423/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com