【发布时间】:2021-05-08 21:08:21
【问题描述】:
我有一个模板函数,我需要在其中将 const char * 转换为我的模板值。 我知道这个 const char * 最初是从 ascii 文本文件中读取的。我当前的代码如下所示:
template <typename T>
bool Get(T &value, std::string const &query, T const &default)
{
const char* result = DataHandler.GetValue(query);
if (result != NULL)
{
value = static_cast<T>(result); //Here is the issue
return true;
}
value = default
return false;
}
以 int 为例,我得到了错误
错误 C2440:“static_cast”:无法从“const char *”转换为“int”
有没有办法可以无缝地将 char* 转换为我的类型 T,我在 SO 上找不到答案。
在最坏的情况下,我可以为我期望的 10 种类型提供一个案例,如果不是其中一种,我会给出错误,但如果可能的话,我宁愿不这样做。
【问题讨论】:
-
添加一个专门针对您支持的每种类型的转换函数。
-
转换字符串有多种解释,例如可以将“0xFF”转换为255,或者不支持十六进制。您需要决定支持哪些并将其添加(有一些可爱的标准函数,如 atoi 可以提供帮助)
-
这个字符串中有什么数据?键入数字的ASCII表示?原始值的按位复制?您是否将文本
Stairway to Heaven转换为 MP3?没有一种方法可以将“ASCII”转换为任意对象类型。这个问题不够清晰。 -
处理此问题的一般方法是将转换模板化并将其添加为模板参数,将该参数默认为合理的值,并在您想做一些深奥的事情时进行自定义。此外,您的函数返回
bool,因此返回true或false更清晰,而不是1和0。
标签: c++ templates type-conversion