之前曾问过类似的问题,例如String literal matches bool overload instead of std::string。
但是我想知道C ++开发人员应该怎么做才能防止这种情况的发生?作为编写C ++库供他人使用的人,我应该怎么做才能确保不会发生这种情况?这是我今天遇到的示例,其中一个库具有2个initialize()
方法:
void initialize(bool someflag) { /* ... */ }
void initialize(const std::string & name) { /* ... */ }
现在有问题的代码存在于想要利用此功能的应用程序中,并以类似于以下方式的方式对其进行了调用:
initialize("robert");
乍一看,您会认为这会调用initialize(string)
,但实际上它会调用布尔值设置为true的第一个initialize(bool)
!
是的,我知道可以通过以下方式解决此问题:
initialize( std::string("robert") );
但这会给调用者带来麻烦。
为@zdan编辑:自从1)我不认为其他链接的问题中的“解决方案”是很好的解决方案,因为我希望不必为每个方法的const char *
版本添加一个bool或字符串,以及2)模板解决方案显着提高了受影响方法的代码可维护性,使它们几乎不可读。
答案 0 :(得分:4)
我该怎么做才能确保不会发生这种情况?
一种可能性是创建一个接受char const*
的重载,并将其传递给接受std::string
的重载。
void initialize(char const* name) { initialize(std::string(name)); }