c++ - 基于 type_info 对象的特殊化代码

标签 c++ boost generic-programming typeinfo

我有一个 type_info 对象,它定义了属性映射中的属性类型。我想运行一些代码(例如从 cin 中读取值),该代码使用我的 type_info 对象定义的类型进行参数化。它可以是一些模板函数,即:

template<typename T>
void do_something()
{
  T a; cin >> a;
}

然后在代码的其他部分我想调用它:

const type_info &type_description = foo.get_type_of_something();
do_some_magic(do_something, type_description);

我正在寻找调用 do_somethingdo_some_magic 函数,该函数专用于 type_descriptor 描述的类型。模板函数可以包裹在一些结构中,这无关紧要。

当然,这只能用于预先定义的有限类型集(因为必须在编译时为每个类型生成专门化)。

一种方法是制作一个链式的 if(type_descriptor==typeid(int))/*...*/else if(type_descriptor==... 等等,但是这个不是很漂亮的解决方案(imo)。

我想知道是否存在更干净的解决方案?或者也许某些库(最好是“boost”)已经实现了这种机制?

最佳答案

A type_info对象在运行时 向您提供有关对象的信息。解决您问题的唯一方法是将其与 typeid 的结果进行比较每种目标类型的运算符。

既然你正在寻找一些漂亮的东西,你可以做一个maptype_info (实际上是包装)到 (boost|std)::function<>

关于c++ - 基于 type_info 对象的特殊化代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10790842/

相关文章:

c++ - 定期清理 map

c++ - 在 for 循环中声明几个新的计数器

c++ - 如何在 C++ 中展开一个短循环

c++ - Boost.Beast 速率限制

generics - 使用 GHC.Generics 反序列化

C++ 错误:没有匹配函数来调用‘simplex615<arbitraryFunc>::amoeba

c++ - Boost C++ 中的索引子集迭代器

c++ - 使用 boost 创建线程池

具有泛型类型参数的类型的 C# 扩展方法

c++ - 如何克隆多个继承对象?