gpt4 book ai didi

c++ - 如何将 friend 声明为静态语言环境函数

转载 作者:搜寻专家 更新时间:2023-10-31 00:30:30 25 4
gpt4 key购买 nike

我有以下代码:从接口(interface)派生的模板类需要使用静态本地函数。我宣布它为 friend ;但是,该函数不能“在此上下文中”调用私有(private)/ protected 成员。

如何正确设置这个静态语言环境函数为友元?

我指定我的类是模板,因为这样,我不能在其中使用内联友元函数(编译器说我的函数被重新定义)。

此外,我无法更改接口(interface)类。

这是代码:

class Interface
{
protected:
virtual void virt(void) = 0;
};

static void bar(Interface *b);

template<class T>
class Foo : public Interface
{
// How to properly say the local function bar is friend ?
friend void bar(Interface *b);

T val;

public:
void virt(void)
{
}

void func(void)
{
bar(this);
}
};

static void bar(Interface *b)
{
b->virt(); // Error: virt() is protected.
}

int main(void)
{
Foo<int> foo;

foo.func();
return 0;
}

最佳答案

barFoo 的友元,但不是Interface 的友元。并且不需要将 bar 声明为 Foo 的友元,因为它只调用 Interface 上的 protected 成员函数。您可以将其声明为 Interface 的友元。

class Interface;
static void bar(Interface *b);

class Interface
{
friend void bar(Interface *b);
protected:
virtual void virt(void) = 0;
};

关于c++ - 如何将 friend 声明为静态语言环境函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36748620/

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