gpt4 book ai didi

c++ - 进行依赖注入(inject)时公开私有(private)方法

转载 作者:行者123 更新时间:2023-11-30 01:35:14 28 4
gpt4 key购买 nike

我有一个模板类“Foo”和另一个非模板类“Bar”。我想在 Foo 中有一个 Bar 实例,并公开一个仅对 Foo 私有(private)的 Bar 函数。

例子:

template <typename T>
class Foo
{
std::shared_ptr<Bar> m_bar;
bool Func()
{
return m_bar->DoSomething();
}
}

class Bar
{
private:
bool DoSomething();
}

最佳答案

您可以将 Foo 模板声明为 Bar 的友元:

class Bar
{
template <class T> friend class Foo;
// same as before...
};

现在,任何 Foo 实例化都可以调用 Bar 的私有(private)成员函数。代码可以编译,但您仍然可以考虑是否值得这样做:正如@StoryTeller 在评论中指出的那样,友元类不仅是非常强的耦合,它还保证可以访问任何 数据由于某种原因可能是 privateprotected 的成员和成员函数。换句话说,friend 类确实违反了封装,使用这种方案应该有充分的理由。

但是请注意,您并没有真正注入(inject) Bar。注入(inject)发生在外部,例如通过将 Bar 实例传递给 Foo 的构造函数,和/或通过使用 Bar 模板参数实例化 Foo .在您的情况下,这可能是

template <typename T>
class Foo
{
std::shared_ptr<T> m_bar;
// same as before...
};

Foo<Bar> instance;
// ^^^ inject dependency on Bar

关于c++ - 进行依赖注入(inject)时公开私有(private)方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54570287/

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