可变参数模板和GCC printf属性

时间:2015-03-07 01:25:53

标签: c++ templates gcc variadic-templates

问题How to use GCC's printf format attribute with C++11 variadic templates?与我的相似,但我在解决方案方面取得了更多进展。

GCC 4.8.1。暂且不谈(效率)问题,请采用以下方法

template <typename ... Ts>
  __attribute__((format(printf, 1, 0)))
inline std::string stdprintf(const char *format, Ts ...ts) {
  char buf[256];
  snprintf(buf, 256, format, ts...);
  return std::string(buf);
}

根据documentation,我必须在format(printf, 1, 0))中设置0而不是2,因为printf以可变方式使用。数字表示函数的哪个参数是格式字符串,哪个是要检查与%格式说明符一致的第一个参数。 0导致检查更弱。

然而,在模板扩展之后,函数不是真正的变量。这只是gcc在扩展之前坚持要看这个问题吗?

0 个答案:

没有答案