私はboost :: promoteと同様の宣言テンプレートエイリアスを作成していますが、C++では11です。 varidic関数から引数を取り出す際の警告を避けるためです。例えば 1)intは) 2をint型に昇格されたフロートはenumクラスと通常のenumを区別するためのC++ 11型の特性
を倍に促進されるよりも小さいです整数:
template <typename T>
std::vector<T> MakeArgVectorV(int aArgCount, va_list aArgList)
{
std::vector<T> args;
while (aArgCount > 0)
{
args.push_back(static_cast<T>(va_arg(aArgList, Promote<T>)));
--aArgCount;
}
return args;
}
テンプレートエイリアスを推進するには、可変長引数のデフォルトの引数のプロモーション以下のタイプを促進します私の問題は、標準のC++ enumを宣言できますが、C++ 11 enumクラスは宣言されていないことです(コンパイラは警告を生成しません)。私は通常のenumで動作するようにPromoteをしたいが、C++ 11 enumクラスは無視する。
私のプロモートテンプレートエイリアスのenumクラスとenumの違いを教えてください。ここ
本当の問題は、 'std :: initializer_list'やバリデーションテンプレートの代わりに' va_arg'sを使っていることです。 – Fanael
チップをありがとうが、私はCのインターフェイスで作業しているので、私はva_listを持っています。 – Sam
@Sam:私の答えはあなたの問題を解決していますか? –