Ood*_*ini 5 c++ variadic variadic-templates c++11 fmt
我使用名为 fmt 的格式化库(http://fmtlib.net/latest/)。
可能的用途之一是:
fmt::format("Hello, {name}! The answer is {number}. Goodbye, {name}.", fmt::arg("name", "World"), fmt::arg("number", 42));
Run Code Online (Sandbox Code Playgroud)
我想将此调用包装在一个函数中,我将其调用为:
myFunction(myString, {"name", "World"}, {"number", 42});
Run Code Online (Sandbox Code Playgroud)
对于任意数量的参数。
到目前为止,我只成功地完成了一个可使用成对列表调用的函数:
myFunction(myString, std::make_pair("name", "World"), std::make_pair("number", 42));
Run Code Online (Sandbox Code Playgroud)
具有以下功能:
std::string myFunction(const char* str, const Args&... rest) const
{
return fmt::format(mLocale.getPOILabel(label), fmt::arg(rest.first, rest.second)...);
}
Run Code Online (Sandbox Code Playgroud)
但我不想使用成对的。
我应该怎么办 ?
PS:fmt::arg不能在函数之间传递。
尝试移动 fmt::arg 的结果,而不是复制或传递 const 引用。
template<typename ... Args>
std::string myFunction(const char* str, Args&&... rest) const
{
return fmt::format(mLocale.getPOILabel(label), std::forward<Args...>(rest)...);
}
myFunction(myString, fmt::arg("name", "World"), fmt::arg("number", 42));
Run Code Online (Sandbox Code Playgroud)