我正在写一个类似于boost :: promote的促销模板别名,但对于C++ 11。 这样做的目的是在从varidic函数中检索参数时避免警告。例如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;
}
的促进模板别名促进以下默认参数晋升为可变参数的类型: 1)一个整数,是小于一个int被提升为int 2)浮子被提升到一倍
我的问题是,可以提升标准C++枚举,但不推荐C++ 11枚举类(编译器不会生成警告)。我想促进与常规枚举一起工作,但忽略C++ 11枚举类。
如何分辨我的Promote模板别名中的枚举类和枚举之间的区别?
真正的问题是,您正在使用'va_arg's而不是'std :: initializer_list'和/或variadic模板。 – Fanael 2013-03-23 11:50:58
感谢您的提示,但我有va_list,因为我正在使用C接口。 – Sam 2013-03-23 13:08:17
@Sam:我的答案能解决您的问题吗? – 2013-03-24 17:14:26