C++ 如何使用数组调用printf?

C++ 如何使用数组调用printf?,c++,printf,variadic-functions,C++,Printf,Variadic Functions,我正在尝试创建一个简单的模板引擎,一个引擎 它接受一个模式和一些变量,并生成一个字符串输出。 这就是想法: const char * pattern = ReadPattern(); // pattern is like "%s in %s ft" vector<const char *> variable = ReadVariable(); // variable is like "6", "5". const char*pattern=ReadPattern();//模式类似于

我正在尝试创建一个简单的模板引擎,一个引擎 它接受一个模式和一些变量,并生成一个字符串输出。 这就是想法:

const char * pattern = ReadPattern(); // pattern is like "%s in %s ft"
vector<const char *> variable = ReadVariable(); // variable is like "6", "5".
const char*pattern=ReadPattern();//模式类似于“%s”(在%s ft中)
向量变量=ReadVariable();//变量类似于“6”、“5”。
如何使用它们调用printf函数? 理想情况下,我可以执行
printf(模式,变量[0],变量[1])
但因为模式和变量直到运行时才知道,
我甚至不知道变量的数目。
据我所知,以编程方式构建va_列表是不可移植的


请帮忙,谢谢

如果对
向量
元素的数量有一个上限,那么它是相对直接的。假设上限为3:

int printf_vector(const char *p, vector<const char *> v) {
    switch (v.size()) {
    case 0: return printf(p);
    case 1: return printf(p, v[0]);
    case 2: return printf(p, v[0], v[1]);
    case 3: return printf(p, v[0], v[1], v[2]);
    default: break;
    }
    return -E2BIG;
}
int printf_向量(常量字符*p,向量v){
开关(v.size()){
案例0:返回printf(p);
案例1:返回printf(p,v[0]);
案例2:返回printf(p,v[0],v[1]);
案例3:返回printf(p,v[0],v[1],v[2]);
默认:中断;
}
返回-大;
}

如果没有上限,那么。

但是“填充-a-va-list”的最佳答案是“这是个坏主意…”在运行时为printf()生成模式很可能是个坏主意。这通常会导致安全问题。从理论上看,您可以查看代码的汇编输出,并了解如何编写内联汇编循环以将向量元素推送到堆栈上并调用
printf