gpt4 book ai didi

采用成员函数并向其返回静态 lambda/std::function 的 C++ 函数

转载 作者:太空宇宙 更新时间:2023-11-04 15:17:15 25 4
gpt4 key购买 nike

我想实现一个成员函数,它接受一个指向另一个成员函数的指针并返回一个静态绑定(bind)。可以是任何东西:lambda 或 ? std::function.

从这一刻起,我在 C++11 中做了以下意图但没有成功:

#include <functional>
#include <iostream>

class MyClass{
public:
auto link( std::function<void(MyClass::*)(int)> func)->std::function<void(int)>
{
return [this, func](int i){func(i);};
}
auto myFunc(int i)->void { std::cout << "Ok:" << i << std::endl; }

auto test ()->void
{
link(&MyClass::myFunc)(4);
}
};

auto main()->int
{
MyClass c;
return 0;
}

最佳答案

专业std::function<T>仅在 T 时定义是一个函数类型。没有 std::function<T>其中 T是指向成员函数类型的指针。无论如何,构造一个 std::function 是没有意义的。如果您只想传递指向成员函数的指针,则为参数。您可以像这样直接这样做:

auto link(void (MyClass::*func)(int))->std::function<void(int)>

必须使用 .* 调用指向成员函数的指针或 ->*左侧带有适当类的表达式或指向类类型(分别)的指针的运算符。因此在这种情况下你可以这样写:

return [this, func](int i){(this->*func)(i);};

关于采用成员函数并向其返回静态 lambda/std::function 的 C++ 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29741842/

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