最有效的检查对象是否是字符串的方法
Most efficient way to check if object is a String
我得到一个对象(msg.data
),它是一个数字或字符串。如果它是字符串,我不想用它,如果它是数字,我想用它。我目前用ostringstream
解决了这个问题,尽管我认为有更好的解决方案:
void scan_cb(const sensor_msgs::LaserScan::ConstPtr& scan)
{
float dist = 0.0f;
std::ostringstream s;
s << scan->ranges[0]; // can be string (always "inf") or a float
if(s.str() != "inf"){
dist += scan->ranges[0];
}
...
我关心的是效率,因为这是每秒运行多次的for循环的一部分。
基本结构是来自某个主题的ROS消息,基本上可以具有任何数据类型。在这种情况下,我使用LaserScan消息,文档中没有提到range[x]
可以返回"inf"。
根据ROS文档,scan->ranges
是一个float数组。这是有意义的,因为当ranges[0]
的字符串表示不是inf
时,将其添加到浮点数(dist
)。
这意味着(正如MSalters在其注释中猜测的那样),你有一个真正的浮点值,你只是想确保它是一个实数,既不是无穷大的值,也不是NaN(非数字)值。
因此,如果您包含cmath
(或math.h
),则可以使用C分类宏来确定数字是有限的(但允许次正态值)还是正常的(即使次正态值也被拒绝):
void scan_cb(const sensor_msgs::LaserScan::ConstPtr& scan)
{
float dist = 0.0f;
if(isfinite(scan->ranges[0])){
dist += scan->ranges[0];
}
...
(维基百科关于IEEE-754浮点数表示的更多参考)
相关文章:
- 有哪些有效的方法可以消除一组 100 万个字符串>重复数据?
- 在 c++ 中对类中的 c 字符串动态数组进行排序的最佳方法是什么?
- 具有字符串化的可变参数宏的现代/通用方法
- 接收字符串并使用它来调用方法C++
- 如何分隔字符串并将标记传递给方法
- 是否有通用方法可以找到任何以 null 结尾的字符串的长度?
- 当映射包含字符串向量作为值时,从值中获取键的有效方法
- 在 C++11 中字符串化变量名称的替代方法
- 连接和压缩标准::vector<std::字符串的最佳方法>
- Esp8266 & Nodemcu:返回请求字符串的方法
- 将位字符串转储到二进制文件的最佳方法是什么
- 有没有一种 STL 方法可以找到字符串的所有排列,给出一个以 C++ 为单位的大小?
- 如何将字符串从 C++/CLI 方法返回到调用它的非托管C++
- 返回混合 \ 和 / 的文件系统路径字符串方法
- VS 链接器失败,标准::字符串方法出现"object already exists"错误
- Lua:为自定义用户数据提供一个字符串方法
- 语法错误字符串方法C++
- 返回原始子字符串的子字符串方法
- 为什么我不能在C++中使用这种方法与"char"而不是"字符串"方法?
- 如何使c++字符串函数的行为像Java和c#字符串方法