这是一些可以编译并正常工作的 C++ 示例代码:
class A
{
public:
A() {/* empty */}
private:
friend void IncrementValue(A &);
int value;
};
void IncrementValue(A & a)
{
a.value++;
}
int main(int, char **)
{
A a;
IncrementValue(a);
return 0;
}
但是,我想做的是将 IncrementValue() 声明为静态的,这样就无法从另一个编译单元看到或调用它:
static void IncrementValue(A & a)
{
a.value++;
}
但是,这样做会给我一个编译错误:
temp.cpp: In function ‘void IncrementValue(A&)’:
temp.cpp:12: error: ‘void IncrementValue(A&)’ was declared ‘extern’ and later ‘static’
temp.cpp:8: error: previous declaration of ‘void IncrementValue(A&)’
...并将朋友声明更改为匹配无济于事:
friend static void IncrementValue(A &);
...因为它给出了这个错误:
temp.cpp:8: error: storage class specifiers invalid in friend function declarations
我的问题是,C++ 中是否有任何方法可以拥有一个声明为静态的(非方法)友元函数?