Xét đoạn mã sau:Con trỏ để hoạt động thành viên: những gì hiện `R (* C :: *) (Args ...)` nghĩa là gì?
template <class>
struct test: std::integral_constant<int, 0> {};
template<class R, class C, class... Args>
struct test<R(C::*)(Args...)>: std::integral_constant<int, 1> {};
template<class R, class C, class... Args>
struct test<R(*C::*)(Args...)>: std::integral_constant<int, 2> {};
template<class R, class C, class... Args>
struct test<R(**C::*)(Args...)>: std::integral_constant<int, 3> {};
template<class R, class C, class... Args>
struct test<R(C::**)(Args...)>: std::integral_constant<int, 4> {};
template<class R, class C, class... Args>
struct test<R(C::***)(Args...)>: std::integral_constant<int, 5> {};
Tôi hoàn toàn không có ý tưởng về những gì (*C::*)
, (**C::*)
, (C::**)
và (C::***)
có ý nghĩa. Tôi muốn có ví dụ về số test<decltype(f)>
có value
sẽ bằng 2
, 3
, 4
và 5
. Ngoài ra, trong trường hợp đó, cú pháp của f
sẽ gọi hàm thành viên như thế nào?
Cảm ơn! Bạn có thể đưa ra một ví dụ nếu 's' có một hàm thành viên' int f (int x) {return x;} ', và' testN' đề cập đến nó, cú pháp để thực hiện 'testN' trên một biến là gì? – Vincent
@Vincent, tôi đã đạt được điều đó. Một giây. – chris