【问题标题】:c++ - interface for type conversion, not castc ++ - 类型转换的接口,而不是强制转换
【发布时间】:2013-04-20 21:33:56
【问题描述】:

这有点难以解释,但我会尽力而为。假设我们有一个接收选项的函数。该选项将是第一次,一个字符串。像这样的:

command option="blah blah blah"

在这里,我们的选项应该是blah blah blah

现在,我想为开发人员提供一种将字符串“转换”(not cast)为另一种类型的方法。我会为基本类型实现我自己的“翻译器”,例如boolint,例如:

command recursive="true"

命令行=7

让开发人员覆盖它们或指定新的,也许使用函子(因为我使用的是 C++11,所以使用美妙的functional 没有问题)。

问题是我还没有找到一个可以接受的关于如何实现它的想法。根据我对 C++ 的了解,我已经尝试了一些东西——这绝对不是“完整的”,而是“可以接受的”——但其中很多都没有工作或让我陷入困境。我的意思是我可以使用一些肮脏的技巧,但我想要最优雅的解决方案(当然是类型安全的)。

我希望我不会成为你的luser。感谢您的宝贵时间,无论如何,对不起。

最好的问候, 卡尔里什

【问题讨论】:

  • boost::lexical_cast - 不要让名字欺骗了你。它可以满足您的需求。
  • @Captain Obvlious 我很抱歉 - 遗憾的是,在我正在处理的环境中,boost 不是一个选项。很抱歉没有指出这一点。无论如何,谢谢。
  • 好吧,祝你好运重新发明轮子。确保没有人注意到你付款:-)
  • @KerrekSB 我认为实现类型转换器一定不难。事实上,正如我所指出的,我想让开发人员通过std::function 显式覆盖它来更改正在使用的“转换器”。如果开发人员使用 boost,那么他/她就可以了。我不能使用 boost,这是我的限制。
  • 嗯,你需要一个解析器...

标签: c++ types type-conversion


【解决方案1】:

要将字符串转换为整数,您可以从使用 atoi 开始。

std::string strValue = "1245";
int intValue = atoi(strValue.c_str());

或者在 C++11 中你可以使用

int intValue = std::atoi(strValue.c_str());

要转换为布尔值,您可以从比较字符串开始

bool boolValue = strValue == "true";

【讨论】:

  • 为什么要使用?: 将布尔值转换为相同的布尔值?此外,在 C++11 中,这将是 std::stoi(strValue)
  • @MikeSeymour 因为string::compare 返回int 而不是bool
  • 但是您将它与 0 进行比较,给出您需要的布尔值。为什么你认为你需要?: 舞蹈?就此而言,如果要进行相等比较,为什么不使用strValue == "true"
  • @MikeSeymour 简单地避免将int 强制为bool 的警告。我通常将警告选项作为错误启用,因此避免警告是一种习惯。
  • @MikeSeymour 确认!现在明白了,谢谢。更新
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-01-24
  • 2012-08-05
  • 1970-01-01
  • 2017-10-05
  • 2015-08-17
  • 2013-06-06
  • 1970-01-01
相关资源
最近更新 更多