我有一个方法,接受格式字符串和参数(类似于 printf()),但是我使用可变模板来实现这个目的:
template<typename... Args>
static void log(const char* pszFmt, Args&&... args)
{
doSomething(pszFmt, std::forward<Args>(args)...);
}
一些args可以是std::string实例。有没有可能确保doSomething永远不会接受std::string,而始终接受将每个源std::string传递给log()的const char*
呢?
换句话说,我需要一种方法将所有args
转发到doSomething()
,使得所有std::string
参数都替换为std::string::c_str()
返回的内容。
提前致谢!
std::forward
来转发args
,否则它们会变成左值引用。 - rustyxauto
将总是按值返回。最好返回T&&
。 - superdecltype(auto)
和std::forward
,我已经编辑了我的回答。 - MichaelmyForward(T&&)
准备两个重载,而不是string
版本。只需要通过const&
接受string
即可。 - rustyx