如何用数组调用printf?

时间:2013-06-12 22:29:44

标签: 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".

如何用它们调用printf函数? 理想情况下,我可以做printf(pattern, variable[0], variable[1]); 但是因为模式和变量直到运行时才知道, 我甚至不知道变量的数量。 据我了解,以编程方式构建va_list是不可移植的。

请帮助,谢谢!

1 个答案:

答案 0 :(得分:1)

如果vector元素的数量有上限,则相对简单。假设上限为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;
}

如果没有上限,则为this is a bad idea