Tôi đang viết một bí danh mẫu quảng cáo tương tự như boost :: promotion nhưng for C++ 11. Mục đích của việc này là để tránh cảnh báo khi truy xuất đối số từ các hàm đa dạng. ví dụ.C++ 11 loại đặc điểm để phân biệt giữa lớp enum và enum thường xuyên
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ác Thúc đẩy mẫu alias thúc đẩy các loại hình sau việc thúc đẩy đối số mặc định cho các đối số variadic: 1) Một số nguyên đó là nhỏ hơn một int được thăng int 2) Một float được đề bạt lên gấp đôi
Vấn đề của tôi là một enum chuẩn C++ có thể được quảng bá nhưng một lớp enum C++ 11 không được phát huy (trình biên dịch không tạo ra một cảnh báo). Tôi muốn quảng bá để làm việc với một enum thường xuyên nhưng bỏ qua một lớp enum C++ 11.
Làm cách nào để biết sự khác biệt giữa một lớp enum và enum trong bí danh mẫu Quảng bá của tôi?
Vấn đề thực sự là bạn đang sử dụng 'va_arg' thay vì mẫu' std :: initializer_list' và/hoặc variadic. – Fanael
Cảm ơn mẹo nhưng tôi có va_list vì tôi đang làm việc với giao diện C. – Sam
@Sam: Câu trả lời của tôi có giải quyết được vấn đề của bạn không? –