我使用std::string
很多,但我使用的各種庫以const char*
爲參數。我很疑惑std::string
沒有轉換運算符到const char*
。所以我正在尋找一些方法,無需在我的項目中始終調用c_str()
。自動將std :: string轉換爲char *而無需每次調用c_str()的最佳方法
有沒有辦法?
我使用std::string
很多,但我使用的各種庫以const char*
爲參數。我很疑惑std::string
沒有轉換運算符到const char*
。所以我正在尋找一些方法,無需在我的項目中始終調用c_str()
。自動將std :: string轉換爲char *而無需每次調用c_str()的最佳方法
有沒有辦法?
給出以下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);
因此,我們在提高安全性和優雅的同時減少冗長。
這取決於你的代碼的結構?
{
auto str=foo.c_str();
do_x(str);
do_y(str);
do_z(str);
//etc
}
const char*
所有功能都定位到接受const std::string
,先從最常見的幾個模塊寫的包裝。
調用'c_str()'時,* actual *的問題是什麼? –
@JesperJuhl我想這只是代碼中的所有重複鍵入和混亂。儘管在查看大量模板化代碼時,C++是一種嘈雜冗長的語言。 – Barmar
一種方法是爲這些函數編寫包裝,並在那裏調用'c_str'。你只需要每個功能一次,而不是每次使用一次。 – NathanOliver