我已经修改了https://en.cppreference.com/w/cpp/language/parameter_pack中的示例,以将字符串保存在变量中。我的代码
#include <string>
void tprintf(std::string& str, const std::string& format)
{
str += format;
}
template <typename T, typename... Targs>
void tprintf(std::string& str, const std::string& format, T arg, Targs ...Fargs)
{
for ( int i = 0; i < format.size(); i++ )
{
if ( format.at(i) == '%' )
{
if (format.at(i + 1) == 'd')
{
std::cout << "== 'd' -variable = " << arg << std::endl;
str += std::to_string(arg);
}
else if (format.at(i + 1) == 's')
{
std::cout << "== 's'" << std::endl;
str += arg;
}
tprintf(str, (i + 2 < format.size() ? format.substr(i + 2) : ""), Fargs...);
break;
}
str += format.at(i);
}
}
int main()
{
std::string str;
int age = 24;
std::string name("Hugo");
tprintf(str, "Name: %s, age: %d years\n", name, age);
std::cout << "result = " << str << std::endl;
}
编译代码时出现以下错误:
error: no matching function for call to ‘to_string(std::__cxx11::basic_string<char>&)’
str += std::to_string(arg);
我认为参数包扩展到
tprintf(std::string&, const std::string&, std::string, int)
<-arg
是std::string
tprintf(std::string&, const std::string&, int)
<-arg
是int
,我可以打电话std::to_string(arg)
但似乎arg
有另一种类型而不是int
(std::string
或其他)?当我删除std::to_string
呼叫时,我得到了一些神秘的字符。
如何将年龄的值转换为 astring
并将其附加到str
?