【发布时间】:2013-03-13 05:50:39
【问题描述】:
我正在为 C++11 编写类似于 boost::promote 的促销模板别名。 这样做的目的是避免在从可变函数检索参数时出现警告。例如
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;
}
Promote 模板别名提升可变参数的默认参数提升之后的类型: 1) 小于 int 的整数被提升为 int 2) 浮点数被提升为双精度
我的问题是可以提升标准 C++ 枚举,但不能提升 C++11 枚举类(编译器不会生成警告)。我希望提升使用常规枚举但忽略 C++11 枚举类。
如何区分枚举类和提升模板别名中的枚举?
【问题讨论】:
-
真正的问题是您使用的是
va_args 而不是std::initializer_list和/或可变参数模板。 -
感谢您的提示,但我有 va_list 因为我正在使用 C 接口。
-
@Sam:我的回答能解决你的问题吗?
-
@AndyProwl:完美的答案,正是我想要的!
标签: c++ templates c++11 variadic variadic-functions