【发布时间】:2017-08-07 14:58:50
【问题描述】:
我使用了一个名为 fmt (http://fmtlib.net/latest/) 的格式化库。
其中一种可能的用途是:
fmt::format("Hello, {name}! The answer is {number}. Goodbye, {name}.", fmt::arg("name", "World"), fmt::arg("number", 42));
我想将此调用包装在一个函数中,我将其称为:
myFunction(myString, {"name", "World"}, {"number", 42});
对于任何个参数。
到现在为止,我只成功地做了一个可以用一对列表调用的函数:
myFunction(myString, std::make_pair("name", "World"), std::make_pair("number", 42));
功能:
std::string myFunction(const char* str, const Args&... rest) const
{
return fmt::format(mLocale.getPOILabel(label), fmt::arg(rest.first, rest.second)...);
}
但我不想使用对。
我该怎么办?
PS : fmt::arg 不能在函数之间传递。
【问题讨论】:
-
可以用模板化的构造函数定义一个类,即
template<typename T> arg(const char *name, T &&value),然后{"number", 42}将成功地使用统一的初始化语法绑定到该类,并构造它。但是,我想不出一种方法来定义一个采用args 的可变参数列表的函数。好像参数包不喜欢大括号统一初始化语法... -
您的 PS 不可能是真的,因为您将它们传递给
fmt::format。我希望它只通过右值引用接收它们
标签: c++ c++11 variadic-templates variadic fmt