gpt4 book ai didi

c++ - 将 std::shared_ptr 与指向成员函数的指针一起使用

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:19:13 40 4
gpt4 key购买 nike

使用 C 指针我可以做这样的事情:

#include <iostream>
#include <memory>
class Foo {
void bar(){
std::cout<<"Hello from Foo::bar \n";
}
}

void main(){
Foo foo;
Foo* foo_ptr=&foo;
std::shrared_ptr<Foo> foo_sptr(&foo);
void (Foo::*bar_ptr)()=&Foo::bar;
(foo.*bar_ptr)();
(foo_ptr->*bar_ptr)();
//(foo_sptr->*bar_ptr)(); // does not compile for me

如果我想使用 smart_ptr 而不是 C 指针,我会得到一个编译器错误:

error: no operator "->*" matches these operands
operand types are: std::shared_ptr<Foo> ->* void (Foo::*)()
(foo_sptr->*bar_ptr)();

有没有办法在没有 std::shared_ptr::get() 的情况下完成这项工作?

最佳答案

std::shared_ptr 不提供重载的 operator ->*。所以你必须使用get():

(foo_sptr.get()->*bar_ptr)();

Live example

关于c++ - 将 std::shared_ptr 与指向成员函数的指针一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21603334/

40 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com