Boost如何为类型选择创建地图?
|
所以我用BOOST.EXTENTION加载模块。我有一个描述每个模块的特殊文件。我从该文件读取变量。
这样的例子:
shared_library m(\"my_module_name\");
// Call a function that returns an int and takes a float parameter.
int result = m.get<int, float>(\"function_name\")(5.0f);
m.close();
对我来说会变成:
shared_library m(\"my_module_name\");
// Call a function that returns an int and takes a float parameter.
int result = m.get<myMap[\"TYPE_1_IN_STRING_FORM\"], myMap[\"TYPE_2_IN_STRING_FORM\"]>(\"function_name\")(5.0f);
m.close();
如何创建可以映射标准和服装类型的地图?
更新:
可能带有变体:
shared_library m(\"my_module_name\");
int result = m.get<boost::variant< int, float, ... other types we want to support >, boost::variant< int, float, ... other types we want to support > >(\"function_name\")(5.0f);
m.close();
可以暂停吗?因此,只要在其中声明了所有想要的类型,我们就不会在乎吗?
没有找到相关结果
已邀请:
1 个回复
娜拐赐巫潭
或简单的
生成异构映射,但这将其绑定到编译时间:我们需要知道创建该变体/联合的每种类型。 当然,可以用
存储所有内容及其狗,但问题再次出现:您需要再次从
中提取实型。问题重演。而且,如果您知道真实的类型,您还可以制作一个变体/工会并为自己省下7英镑的麻烦。 现在,对于另一个麻烦的事情:
为了使上述代码行有效,您需要C ++不具备的两个功能:返回类型和运行时模板的功能。让我们暂时忽略第一点。 模板是编译时的,“ 9”函数就是这样的模板。现在,要使用该模板,您的
将需要能够在编译时返回类型,同时在运行时进行填充。看到矛盾了吗?这就是为什么需要运行时模板。 令人遗憾的是,在C ++中,运行时恰好不可能实现这三件事(或非常困难且非常非常有限):异构数据类型(无固定大小),返回类型和模板。 涉及类型的所有事情都需要在编译时完成。 @Gman发表的这篇博文与该问题有些相关。如果您想知道C ++不能做什么,那么绝对值得一读。 因此,总结一下:您将需要重新考虑并重构您的问题和解决方案。 :|