我经常使用std::string
,但我使用的各种库都以const char*
为参数。我很困惑std::string
没有转化运算符const char*
。所以我正在寻找一些方法来不必继续在我的项目中调用c_str()
。
有办法吗?
答案 0 :(得分:4)
给出以下API接口:
namespace someapi {
void foo(const char* pstr);
}
我们可以这样做:
namespace wrap_someapi
{
inline decltype(auto) foo(const char* pstr)
{
return someapi::foo(pstr);
}
inline decltype(auto) foo(std::string const& s)
{
return foo(s.c_str());
}
// or, in c++17
inline decltype(auto) foo(std::string_view s)
{
return foo(s.c_str());
}
}
现在在客户端代码中,而不是调用:
someapi::foo(s.c_str());
我们打电话给:
wrap_someapi::foo(s);
所以我们在提高安全性和优雅的同时失去了冗长。
答案 1 :(得分:2)
这取决于代码的结构?
{
auto str=foo.c_str();
do_x(str);
do_y(str);
do_z(str);
//etc
}
const char*
的所有函数都本地化为几个模块编写接受const std::string
的包装器,从最常见的包装器开始。