gpt4 book ai didi

c++ - std::function 和 shared_ptr

转载 作者:可可西里 更新时间:2023-11-01 18:28:18 24 4
gpt4 key购买 nike

我使用 Loki 的 Functor 有一段时间了,最​​近我问了一个 question关于它(仍然没有答案......)有人告诉我使用 std::function,但我更喜欢 Loki 的 Functor 实现,因为它也可以使用各种指针作为参数(例如 std::shared_ptr)。

struct Toto
{
void foo( int param )
{
std::cout << "foo: " << param << std::endl;
}
};

int
main( int argc, const char** argv )
{
std::shared_ptr<Toto> ptr = std::make_shared<Toto>();

Loki::Functor<void, LOKI_TYPELIST_1(int)> func( ptr, &Toto::foo );

func(1);
}

有没有办法用 std::function 做到这一点?

最佳答案

使用std::bind

auto func = std::bind(&Toto::foo, ptr, std::placeholders::_1);

在这里,func 将被推断为从 std::bind 返回的类型,或者如果你不喜欢 auto 你可以使用(并且你想使用 std::function)

std::function<void(int)> func = std::bind(&Toto::foo, 
ptr, std::placeholders::_1);

此处 std::function 将从 std::bind 的结果构造。ptr 将被复制到从 std::bind 返回的某个对象,但是您可以使用 std::ref/std::cref 如果您不想要拷贝。

关于c++ - std::function 和 shared_ptr,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20609209/

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