gpt4 book ai didi

c++ - 将公共(public)成员函数指针传递给构造函数

转载 作者:行者123 更新时间:2023-12-01 14:39:31 25 4
gpt4 key购买 nike

我想允许在构造时传递一个具体的公共(public)成员函数实现。
如果我可以使用其名称调用该公共(public)成员函数,那将是理想的。

这个例子可以最好地说明它:

class A {
typedef int (A::*mem)(void) const;

public:
A(int aa) : a(aa) {};
A(int aa, mem mm) : m(mm), a(aa) {}; // How to use this?

mem m;

private:
int a;
};

int main() {
A a(3);
// (a.*m)(); // ‘m’ was not declared in this scope
}

最佳答案

假设 A有一个名为 foo 的成员函数(匹配 typedef mem 的签名),那么你可以

A a(3, &A::foo); // pass member function pointer pointing to A::foo
(a.*(a.m))(); // call from the member function pointer on object a

LIVE

编辑

如果您希望调用者提供实现 Liek lambda,您可以使用 std::function反而。
class A {
typedef std::function<int()> mem;

public:
A(int aa) : a(aa) {};
A(int aa, mem mm) : m(mm), a(aa) {}; // How to use this?

mem m;

private:
int a;
};

然后
A a(3, [] { std::cout << "hello"; return 0; });
(a.m)();

LIVE

关于c++ - 将公共(public)成员函数指针传递给构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61450667/

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