[英]Standalone functions/data in C++
我不確定這一點,搜索有點並沒有發現任何特別有用的東西。 所以,假設我有一個帶有命名空間的頭文件,其中包含一些類C1和C2;
namespace my_namesp {
class C1 {
public:
blah1;
...
private:
blah2;
...
};
class C2 {
public:
junk1;
...
private:
junk2;
...
};
} //-End namespace
現在假設在實現(CPP)中,我已經定義了C1,C2的所有成員函數,然后假設我有一些我希望C1和C2共享的常見數據,比如枚舉和字符串數組,但我不知道我們一定希望他們成為任何一個班級的一部分。 那么執行以下操作是合法的(注意:它構建並且工作正常); 如果我將此實現導出為客戶端應用程序的庫,該怎么辦? 這還行嗎? 這種設計是不是因為我應該注意的任何原因而不受歡迎? 也許OOP的一個特定功能可能更適合這種事情?
namespace my_namesp {
enum some_list_num {
list_member1,
list_member2,
...,
list_length
}
static const std::string string_list[] = {
str1,
str2,
...,
strN
}
return_type C1::some_func1(...) {
...
}
...
return_type C1::some_func1(...) {
...
}
} //-End my namespace
再次提前感謝任何想法/更正。
如果C1和C2共享一些應該保留在翻譯單元本地的實現細節,那很好。
最好將它們放在cpp文件中的匿名命名空間中,這樣以后就不存在鏈接器符號沖突的風險(即,如果庫客戶端輕率地向命名空間添加了某些東西並意外地重用了一個“私有”名稱) 。
cpp文件可能如下所示:
namespace { // private implementation details
enum some_list_num {
list_member1,
list_member1,
...,
list_length
}
static const std::string string_list[] = {
str1,
str2,
...,
strN
}
}
namespace my_namesp { // define externally-visible functions etc.
return_type C1::some_func1(...) {
...
}
return_type C1::some_func1(...) {
...
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.