我在file1.cpp
的頭文件interface.h
和一些靜態函數(foo
和bar
和幾個更多)中有一個類MyClass
聲明。靜態函數僅用於file1.cpp
之內,但它們需要修改MyClass的私有/受保護成員。聲明靜態函數爲朋友函數?
// in "interface.h"
class MyClass {
// maybe declare as friend?
// friend static void foo(MyClass &ref);
private:
double someval;
}
// in "file1.cpp"
static void foo(MyClass &ref) {
ref.someval = 41.0;
}
static void bar(MyClass &ref) {
ref.someval = 0.42;
}
// function that uses foo/bar
void doSomething(MyClass &ref) {
foo(ref);
}
理念1:不知何故聲明它們爲MyClass
朋友?
爲什麼它不好:它們是靜態的,在不同的編譯單元中。除此之外,他們會將他們暴露給MyClass
的用戶,他們不需要知道任何關於他們的信息。
理念2:不要有想法2.
排序鏈接:Is it possible to declare a friend function as static?
您是否考慮過重新設計您的班級以免它需要朋友?需要更多的上下文來建議。 – 2015-04-01 12:57:27
在你的例子中,我會簡單地爲'someVal'編寫一個公共setter,並在'doSomething'中使用它。除非你想阻止任何人訪問setter,否則不需要朋友。正如尼爾所說,需要更多信息來決定。 – user463035818 2015-04-01 13:04:02
'foo'和'bar'函數比示例更復雜(所以它們不能改爲簡單的setter和getters)關鍵是要有一些可以修改類的函數,但是它不會混淆它的接口。 – user10607 2015-04-01 13:11:37