Tôi đang gặp phải sự cố khi tôi đang cố tạo hàm thành viên variadic với gói tham số của một loại cụ thể.Chức năng thành viên biến thể của lớp mẫu
template <typename T>
struct A
{
using result_type = T;
T operator()(T a, T b)
{
return a+b;
}
};
template <typename Functor>
struct B
{
using T = typename Functor::result_type;
T operator()(Functor &&f, T... args)
{
return f(args...);
}
};
Nó được dự kiến sẽ hoạt động như:
A<int> a;
B<A<int>> b;
int result = b(a, 2, 3); // should return 5
Tuy nhiên tôi nhận được các lỗi sau đây:
error: type 'T' (aka 'typename Functor::result_type') of function parameter pack does not contain any unexpanded parameter packs
T operator()(Functor &&f, T... args)
~^~~~~~~~
error: pack expansion does not contain any unexpanded parameter packs
return f(args...);
~~~~^
Điều gì sẽ là cách thích hợp để đạt được các chức năng dự kiến?
Không có cách nào tiêu chuẩn để áp dụng các hạn chế đối với loại arg, hoặc sử dụng một loại cụ thể trong gói tham số? Nếu câu trả lời là không thì điều duy nhất tôi có thể làm là một static_assert với std :: is_same. –
plasmacel
@plasmacel, xem cập nhật –
Câu trả lời hoàn hảo. – plasmacel