如何复制C++ Primtf函数
所以我想把一个字符串和可变变量转换成一个完整的字符串,比如printf函数如何用可变变量替换%?s。下面是我要创建的函数:如何复制C++ Primtf函数,c++,C++,所以我想把一个字符串和可变变量转换成一个完整的字符串,比如printf函数如何用可变变量替换%?s。下面是我要创建的函数: template<typename... Args> const char * convert(std::string fmt,Args... arg) { va_list args; int location = fmt.find("%d"); /*Here is the code to convert the string*/ cons
template<typename... Args>
const char * convert(std::string fmt,Args... arg)
{
va_list args;
int location = fmt.find("%d");
/*Here is the code to convert the string*/
const char* returnStr = fmt.c_str();
return returnStr;
}
如何实现/**/中的功能/流程?以下是我遇到的问题:
具体来说,我的问题是:如何从参数中删除项目。。。阿格?另外,如何返回参数。。。arg本身?我需要一个数组还是什么可以工作
非常感谢你的帮助 您可以使用递归模板和: 对于每个参数,将调用一个转换,直到所有参数都嵌入到字符串中。您可以为自定义类专门化convertArgument模板
添加结尾,您可以将字符串转换为cstring。我们不是代码编写服务。陈述一个具体问题,我们很乐意提供帮助。你试过什么?什么不起作用?建议搜索%然后从那里开始工作。我的问题是:如何从参数中删除项目。。。阿格?另外,如何返回参数。。。arg本身?我需要一个数组还是什么可以工作?谢谢至于如何删除一个参数-有一个例子,它甚至有一个简单的_printf!;但是请记住,删除在C++中有特定的含义,并且以一种方式提供参数,如果删除一个,就会发生坏的事情。编写一个函数,使用运行时计算的索引提取元组的适当部分。这并不容易,因为std::get需要一个编译时常量,但使用递归助手类是可行的。这些技术太复杂,无法在stackoverflow.com上用几句话来解释,并且需要模板元编程的高级知识。对于初学者来说,这显然太难了,所以不要尝试这一点,继续阅读你的C++书籍并继续学习模板,直到你可以回答自己的问题,这里。我想你不需要空格EntralGuMUTSTST::String & FMT,INTARG部分。无论如何,非常感谢@在模板void convertArgumentstd::string&fmt中,int-arg用于减少代码重复并轻松添加专门的转换模板。。。将输入VASPINTFCHAR**strp、const char*fmt、VAU列表ap;同样的工作?谢谢@不,可变模板是类型安全的。一个可变函数不是。
#include <iostream>
#include <string>
template<typename Arg>
void convertArgument(std::string &fmt, Arg arg) {
int location = fmt.find("%d");
fmt.replace(location, 2, arg);
}
template<>
void convertArgument(std::string &fmt, int arg) {
int location = fmt.find("%d");
fmt.replace(location, 2, std::to_string(arg));
}
template<typename Arg>
std::string convert(std::string fmt, Arg arg) {
convertArgument(fmt, arg);
return fmt;
}
template<typename Arg, typename... Args>
std::string convert(std::string fmt, Arg arg, Args... args) {
convertArgument(fmt, arg);
return convert(fmt, args...);
}
int main() {
std::cout << convert("%d - %d", "ABC", 123).c_str();
return 0;
}