首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在std::shared_ptr中使用指针到成员函数

在std::shared_ptr中使用指针到成员函数
EN

Stack Overflow用户
提问于 2016-05-27 19:48:15
回答 1查看 163关注 0票数 1

我在挣扎于这段代码:

代码语言:javascript
复制
typedef shared_ptr<node <T>> (node<T>::*son_getter)();
    son_getter get_son[] = {&node<T>::getLeftSon, &node<T>::getRightSon};

insert = node->*get_son[index]();

我得到一个编译错误:

代码语言:javascript
复制
error: must use ‘.*’ or ‘->*’ to call pointer-to-member function in ‘get_son[index] (...)’, e.g. ‘(... ->* get_son[index]) (...)’
 insert = node->*get_son[index]();

其中nodeshared_ptr<node<T>>,就像insert一样。

我试过所有我能猜到的,但仍然不知道发生了什么。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-27 20:11:50

首先,函数调用操作符()->*具有更高的优先级,因此,您需要添加括号以强制执行所需的计算顺序。此外,node是一个智能指针,而指向成员函数的指针引用存储在该共享指针中的类型。

尽管如此,您还是需要使用以下备选方案之一:

代码语言:javascript
复制
(*node.*get_son[index])();

(&*node->*get_son[index])(); // or std::addressof(*node)->*

(node.get()->*get_son[index])();
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37491224

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档