【发布时间】:2014-10-25 20:39:05
【问题描述】:
我正在查看 C++11 库,我不擅长使用 C++ 对象和模板,但我试图读取变量的类型并运行不同的代码,但这里有一个示例说明更好:
if(is_scalar<typeid(list)>)
cout << list << endl;
else
for(...)
cout << list[i] << endl;
我正在尝试做类似的事情,我认为函数 is_scalar 正是我需要的,因为我需要将向量、数组和列表从整数、双精度数或浮点数等中拆分出来。 很难想到在同一个程序中具有不同类型的相同变量,但我试图在运行时(仍然无法正常工作)或使用预处理器定义(这导致我现在出现问题)更改它。
【问题讨论】:
-
您将始终知道变量的类型,因为您创建了变量并为其指定了类型。你不能在运行时神奇地改变它。您可以推断它,但您的后续代码必须在语法上正确在编译时。基本上我不是 100% 确定你想要做什么,但我 90% 确定你不能在 C++ 中做到这一点。也许您正在寻找 PHP 或 JavaScript。
-
typeid是一个运行时运算符。你想要decltype。不过,我也不清楚你到底在问什么。 -
也许您会发现pretty printer 有用?
-
要根据对象的类型运行不同的代码,您应该查看template specialization。
-
我创建了我正在寻找的东西,decltype 现在可以正常工作并运行我的代码。谢谢克里斯!现在我该如何结束这个问题?
标签: c++ c++11 metaprogramming typetraits