Trong khi điều này được dựa trên sterling câu trả lời ở đâu đó trên trang này, tôi đã có một trường hợp sử dụng không được chúng giải quyết hoàn toàn; cho một vector của các con trỏ đến chức năng thực hiện như sau:
#include <iostream>
#include <vector>
#include <stdio.h>
#include <stdlib.h>
class A{
public:
typedef vector<int> (A::*AFunc)(int I1,int I2);
vector<AFunc> FuncList;
inline int Subtract(int I1,int I2){return I1-I2;};
inline int Add(int I1,int I2){return I1+I2;};
...
void Populate();
void ExecuteAll();
};
void A::Populate(){
FuncList.push_back(&A::Subtract);
FuncList.push_back(&A::Add);
...
}
void A::ExecuteAll(){
int In1=1,In2=2,Out=0;
for(size_t FuncId=0;FuncId<FuncList.size();FuncId++){
Out=(this->*FuncList[FuncId])(In1,In2);
printf("Function %ld output %d\n",FuncId,Out);
}
}
int main(){
A Demo;
Demo.Populate();
Demo.ExecuteAll();
return 0;
}
Something như thế này rất hữu ích nếu bạn đang viết một thông dịch lệnh với chức năng lập chỉ mục mà cần phải được kết hôn với cú pháp tham số và giúp đỡ các mẹo, vv Có thể cũng hữu ích trong menu.
Tôi biết điều này là cũ, nhưng tôi không hiểu việc sử dụng '(a. * A.x)()'. Tại sao '(a. * X)()' không hoạt động? –
@gau vì x không nằm trong phạm vi –
@gau tôi đã thêm parens ngay bây giờ để làm cho nó rõ ràng hơn –