template<class T> void HelperGetProp( std::string in_name, T &out_val ){ if ( map_prop_val[in_name] == "" && typeid(T) != typeid(std::string) ){ out_val = boost::lexical_cast<T>( std::string("0") ); } else{ std::map< std::string, std::string >::iterator param_it = map_param_val.find( map_prop_val[in_name] ); if ( param_it == map_param_val.end() ){ try{ out_val = boost::lexical_cast<T>( map_prop_val[in_name] ); } catch( const boost::bad_lexical_cast & ){ out_val = boost::lexical_cast<T>( std::string("0") ); } } else{ try{ out_val = boost::lexical_cast<T>( param_it->second ); } catch( const boost::bad_lexical_cast & ){ out_val = boost::lexical_cast<T>( std::string("0") ); } } } }
时间: 2024-03-29 18:37:43 浏览: 31
这段代码看起来像是一个模板函数,名为 HelperGetProp。它接受两个参数:一个是名为 in_name 的字符串,表示需要获取的属性的名称;另一个是一个类型为 T 的引用,表示这个属性的值。这个函数通过查找一个名为 map_prop_val 的字符串到字符串映射表来获取属性的值。如果这个值为空,并且 T 不是 std::string 类型,那么它会将 out_val 赋值为 0。否则,它会查找一个名为 map_param_val 的字符串到字符串映射表,来获取属性值参数。如果找不到这个参数,那么它会尝试将 map_prop_val[in_name] 的值转换成类型 T,并将结果赋值给 out_val。如果找到了这个参数,那么它会尝试将参数的值转换成类型 T,并将结果赋值给 out_val。如果转换失败,那么它会将 out_val 赋值为 0。
相关问题
指出该类的错误并改正 :class TraceHolder { public: TraceHolder() = delete; static void Register(const std::string& task_name) { auto &map = GetMap(); auto it = map.find(task_name); if (it == map.end()) { std::unique_ptr<StopWatch> ticker = std::make_unique<StopWatch>(); map[task_name] = std::move(ticker); return; } auto ticker = it->second; ticker->reset(); return; } static bool Tick(const std::string &task_name) { auto &map = GetMap(); auto it = map.find(task_name); if (it == map.end()) return false; auto ticker = it->second; ticker->getTime(); double val = ticker->getTime(); TLOGI("%s took %lf ms.", task_name.c_str(), val); return true; } static std::map<std::string, std::unique_ptr<StopWatch>()> &GetMap() { static std::map<std::string, std::unique_ptr<StopWatch>()> map; return map; } };
错误:
1. 在定义静态成员函数 GetMap() 时,应该返回一个引用类型的 map,但是现在返回的是一个指向 map 的 unique_ptr。
2. 在 Tick() 函数中,应该先调用 getTime() 函数获取计时器的时间,再输出日志,但是现在的代码中打印日志和获取时间的顺序颠倒了。
改正后的代码如下:
```
class TraceHolder {
public:
TraceHolder() = delete;
static void Register(const std::string& task_name) {
auto& map = GetMap();
auto it = map.find(task_name);
if (it == map.end()) {
std::unique_ptr<StopWatch> ticker = std::make_unique<StopWatch>();
map[task_name] = std::move(ticker);
return;
}
auto& ticker = it->second;
ticker->reset();
return;
}
static bool Tick(const std::string& task_name) {
auto& map = GetMap();
auto it = map.find(task_name);
if (it == map.end()) return false;
auto& ticker = it->second;
double val = ticker->getTime();
TLOGI("%s took %lf ms.", task_name.c_str(), val);
return true;
}
static std::map<std::string, std::unique_ptr<StopWatch>>& GetMap() {
static std::map<std::string, std::unique_ptr<StopWatch>> map;
return map;
}
};
```
std::_Compressed_pair<std::allocator<char>,std::_String_val<std::_Simple_types<char>>,1>
我不太清楚您的问题是什么。这个是一个模板类型的定义,std::_Compressed_pair 是一个模板类,模板参数包括第一个参数 std::allocator<char> 和第二个参数 std::_String_val<std::_Simple_types<char>>,其中第二个参数是 std::basic_string 的内部定义。1 是一个编译时常量,用于指示是否将第二个参数压缩到第一个参数中去。
相关推荐
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)