C++ 我将如何处理具有不同类的成员函数的函数查找表?

C++ 我将如何处理具有不同类的成员函数的函数查找表?,c++,arrays,member-function-pointers,member-functions,C++,Arrays,Member Function Pointers,Member Functions,我被传递了一个数组,数组中的值需要传递给几个对象来存储。数组是形式的二维数组 {{int ID, int iNewValue}, ...} 我不知道更新了哪些或多少个值,但ID是唯一的,不会更改。我被告知ID-value对一次,这样我就可以使用大量switch语句来检查ID,并将值传递给正确的对象和正确的setter函数。我想我可以使它更加高效和方便,并使用一个查找表,其中索引是ID,元素是指向正确成员函数的指针: for (int i = 0; i < iNewValueLength;

我被传递了一个数组,数组中的值需要传递给几个对象来存储。数组是形式的二维数组

{{int ID, int iNewValue}, ...}
我不知道更新了哪些或多少个值,但ID是唯一的,不会更改。我被告知ID-value对一次,这样我就可以使用大量switch语句来检查ID,并将值传递给正确的对象和正确的setter函数。我想我可以使它更加高效和方便,并使用一个查找表,其中索引是ID,元素是指向正确成员函数的指针:

for (int i = 0; i < iNewValueLength; i++)
{
    int ID = arrayNewValues[i][0];
    int iNewValue = arrayNewValues[i][1];
    (object.*lookup_table[ID])(iNewValue);
}
我该怎么办


提前感谢您在正确方向上的帮助或指点

考虑以下示例类,这些类的一些成员函数接受
int
参数:

struct X {
  void f1(int i) const { std::cout << "X::f1(" << i << ")\n"; }
  void f2(int i) const { std::cout << "X::f2(" << i << ")\n"; }
};

struct Y {
  void f1(int i) const { std::cout << "Y::f1(" << i << ")\n"; }
  void f2(int i) const { std::cout << "Y::f2(" << i << ")\n"; }    
}; 
为了实现您的目标,您可以创建一个值类型为
std::function
查找表:

std::map<int, std::function<void(int)>> m; 
最后,要调用这些函数:

m[1] = [&x](int i){ x.f1(i); };
m[2] = [&x](int i){ x.f2(i); };
m[3] = [&y](int i){ y.f1(i); };
m[4] = [&y](int i){ y.f2(i); };
m[3](12);
m[2](-1);
哪些产出:

Y::f1(12)
X::f2(-1)
现场演示:


请注意lambdas中可能存在的悬空引用。只要查找表中的条目链接到被引用对象,它们通常就需要存在。

非常感谢!我一到家就试试这个。
m[3](12);
m[2](-1);
Y::f1(12)
X::f2(-1)