我有以下类结构
class containingClass
{
int func1(int a);
containedClass containedClassObject;
}
我想访问 containedClass
对象中的 func1
。实现这一目标的最佳方式是什么?
想到的一个天真的解决方案是将函数指针传递给 containedClass
的构造函数,但随后我进入了循环定义,因为我需要将指针传递给containingClass
也是如此。
有什么建议吗?
最佳答案
containedClass
需要 containingClass
的 int 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/