Được biết, đối số mẫu có thể là con trỏ đến các hàm thành viên.Trích đối số mẫu cho các con trỏ hàm thành viên
Vì vậy, tôi có thể viết:
struct Bar
{
int fun(float x);
};
template <int (Bar::*FUN)(float)>
struct Foo
{ /*...*/ };
typedef Foo<&Bar::fun> FooBar;
Nhưng nếu tôi muốn loại các Bar
mình là một mẫu đối số:
template <typename B, int (B::*FUN)(float)>
struct Foo
{ /*...*/ };
typedef Foo<Bar, &Bar::fun> FooBar;
Bây giờ, khi tôi sử dụng nó, tôi phải viết Bar
hai lần!
Câu hỏi của tôi là: Có cách nào để buộc trình biên dịch suy ra loại lớp tự động không?
Mục tiêu là cho điều này chỉ làm việc:
typedef Foo<&Bar::fun> FooBar;
typedef Foo<&Moo::fun> FooMoo;
Thực ra, tôi đang sử dụng macro xấu xí cho điều này (đó là mẫu bên trong thư viện, vì vậy không có nguy cơ thực sự bị lạm dụng). Dù sao, 'member_ptr_traits' rất tuyệt vì tôi thực sự cần kiểu' T'. – rodrigo