1
コンテキスト:私は従来のコードで作業していますが、このコードをC++ 14標準にゆっくりと作りたいのですが、printfが好きです。コードの は、したがって、この種の(簡体字):パラメータパックからvar argsへ
#include <iostream>
#include <string>
#include <cstdio>
template <typename... Args>
const char* Format(const char* strFormat, Args... args)
{
static char szBuffer[10000];
auto len = std::vsnprintf(szBuffer, 10000, strFormat, args...);
if (len < 0 || 10000 <= len)
{
szBuffer[0] = 0;
}
return szBuffer;
}
int main()
{
auto test = Format("%s %s %d", "test", "test", 42);
}
これが妙に動作しません:gccの& VS2013はのva_argに拡張パラメータパックから行くことはできません。 (http://cpp.sh/4aue)
10:66: error: cannot convert 'const char*' to '__va_list_tag*' for argument '4' to 'int vsnprintf(char*, size_t, const char*, __va_list_tag*)'
なぜこの現象が発生するのですか? 一方、間違って中間のvar_arg関数をコンパイルすると、&が正しく動作します(http://cpp.sh/2ggms)。
はあなたがsnprintf
、ない
vsnprintf
たい
テンプレート拡張で起こりうる問題に焦点を当てているので、私はv/snprintfエラーを完全に見落としています...ありがとう、はい、引数チェックが目標です! – Errata