gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 05:52:01 26 4
gpt4 key购买 nike

我有以下类结构

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/

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