c++ - 我应该如何在包含的类对象中访问容器类的函数

标签 c++ callback

我有以下类结构

class containingClass
{

    int func1(int a);
    containedClass containedClassObject;
}

我想访问 containedClass 对象中的 func1。实现这一目标的最佳方式是什么?

想到的一个天真的解决方案是将函数指针传递给 containedClass 的构造函数,但随后我进入了循环定义,因为我需要将指针传递给containingClass 也是如此。

有什么建议吗?

最佳答案

containedClass 需要 containingClassint func1(int) 成员来实现契约/API/函数。除非 containedClass 出于其他目的明确要求访问 containingClass 的实例,否则可以通过 lambda(或 std::bind)提供访问权限) 并且 containedClass 可以有一个 std::function,其中包含保存 lambda 的正确签名成员。

这里唯一的“技巧”是确保对象的生命周期得到适当管理,即 containingClass 实例的生命周期至少与 中使用所需的一样长>containedClassObject 对象。

一个样本;

#include <functional>
class containedClass {
    std::function<int(int)> functor_;
public:
    void setter(std::function<int(int)> functor) { functor_ = functor; }
};

class containingClass
{
    int func1(int a);
    containedClass containedClassObject;

public:
    containingClass()
    {
        containedClassObject.setter([this](int a) -> int { return this->func1(a); });
    }
};

关于c++ - 我应该如何在包含的类对象中访问容器类的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35035985/

相关文章:

javascript - 使用 RegExp.test 进行 Array.some 的回调

android - 与 Activity 生命周期相关的监听器行为

c++ - 在每个源文件中包含一个头文件

c++ - 使用 'bytes at CS:EIP' 找出崩溃发生的位置

c++ - hex << setw() << setfill() 不适用于指针值输出

带有回调 Swift 的 JavaScriptCore 调用函数

javascript - 如何正确使用 Redis 与 Koa (node.js)

c++ - 为共享库加载 gdb 源

C++:浮力程序没有按计划输出

javascript - 从 Javascript 中的回调函数获取变量