我有一个 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_something
的 do_some_magic
函数,该函数专用于 type_descriptor
描述的类型。模板函数可以包裹在一些结构中,这无关紧要。
当然,这只能用于预先定义的有限类型集(因为必须在编译时为每个类型生成专门化)。
一种方法是制作一个链式的 if(type_descriptor==typeid(int))/*...*/else if(type_descriptor==...
等等,但是这个不是很漂亮的解决方案(imo)。
我想知道是否存在更干净的解决方案?或者也许某些库(最好是“boost”)已经实现了这种机制?
最佳答案
A type_info
对象在运行时 向您提供有关对象的信息。解决您问题的唯一方法是将其与 typeid
的结果进行比较每种目标类型的运算符。
既然你正在寻找一些漂亮的东西,你可以做一个map
的 type_info
(实际上是包装)到 (boost|std)::function<>
关于c++ - 基于 type_info 对象的特殊化代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10790842/