在 std::shared_ptr 中使用指向成员函数的指针
Using pointer-to-member functions with std::shared_ptr
我正在为这段代码苦苦挣扎:
typedef shared_ptr<node <T>> (node<T>::*son_getter)();
son_getter get_son[] = {&node<T>::getLeftSon, &node<T>::getRightSon};
insert = node->*get_son[index]();
我遇到编译错误:
error: must use ‘.*’ or ‘->*’ to call pointer-to-member function in ‘get_son[index] (...)’, e.g. ‘(... ->* get_son[index]) (...)’
insert = node->*get_son[index]();
其中 node
是 shared_ptr<node<T>>
,就像 insert
一样。
我已经尝试了所有我能猜到的方法,但仍然不知道发生了什么。
首先,函数调用运算符 ()
的优先级高于 ->*
,因此,您需要添加括号以强制执行所需的计算顺序。另外,node
是一个智能指针,而指向成员函数的指针指的是存储在该共享指针中的类型。
话虽如此,您需要使用以下替代方案之一:
(*node.*get_son[index])();
(&*node->*get_son[index])(); // or std::addressof(*node)->*
(node.get()->*get_son[index])();
我正在为这段代码苦苦挣扎:
typedef shared_ptr<node <T>> (node<T>::*son_getter)();
son_getter get_son[] = {&node<T>::getLeftSon, &node<T>::getRightSon};
insert = node->*get_son[index]();
我遇到编译错误:
error: must use ‘.*’ or ‘->*’ to call pointer-to-member function in ‘get_son[index] (...)’, e.g. ‘(... ->* get_son[index]) (...)’
insert = node->*get_son[index]();
其中 node
是 shared_ptr<node<T>>
,就像 insert
一样。
我已经尝试了所有我能猜到的方法,但仍然不知道发生了什么。
首先,函数调用运算符 ()
的优先级高于 ->*
,因此,您需要添加括号以强制执行所需的计算顺序。另外,node
是一个智能指针,而指向成员函数的指针指的是存储在该共享指针中的类型。
话虽如此,您需要使用以下替代方案之一:
(*node.*get_son[index])();
(&*node->*get_son[index])(); // or std::addressof(*node)->*
(node.get()->*get_son[index])();