Nat*_*ons 0 c++ function-pointers lookup-tables
我正在尝试在我的代码中创建成员函数的查找表,但它似乎试图调用我的复制构造函数,我通过扩展"uncopyable"类来阻止它.我所拥有的是以下内容.
enum {FUN1_IDX, FUN2_IDX, ..., NUM_FUNS };
class Foo {
fun1(Bar b){ ... }
fun2(Bar b){ ... }
...
void (Foo::*lookup_table[NUM_FUNS])(Bar b);
Foo(){
lookup_table[FUN1_IDX] = &Foo::fun1;
lookup_table[FUN2_IDX] = &Foo::fun2;
}
void doLookup(int fun_num, Bar b) {
(this->*lookup_table[fun_num])(b);
}
};
Run Code Online (Sandbox Code Playgroud)
错误是'(this - > ...'行试图调用复制构造函数,这是不可见的.为什么要尝试这样做,我需要改变什么,所以它不会?
使它们成为参考参数.
enum {FUN1_IDX, FUN2_IDX, ..., NUM_FUNS };
class Foo {
fun1(Bar &b){ ... }
fun2(Bar &b){ ... }
...
void (Foo::*lookup_table[NUM_FUNS])(Bar &b);
Foo(){
lookup_table[FUN1_IDX] = &Foo::fun1;
lookup_table[FUN2_IDX] = &Foo::fun2;
}
void doLookup(int fun_num, Bar &b) {
(this->*lookup_table[fun_num])(b);
}
};
Run Code Online (Sandbox Code Playgroud)
在C++中,否则这些普通参数不仅仅引用对象,而且它们本身就是那些对象.使它们成为参考参数只会引用传递的内容.在这个问题上,C++具有与C相同的语义(在其中您将使用指针).