[英]Creating a container 'thing' in C++ to hold static functions. What should 'thing' be?
我目前正在構建一組常用功能(搜索算法實現),並且認為我在做錯誤的分組。 目前,我有一個名為Sorting的類,該類在名為Sorting.h的文件中聲明(尚待完成,btw),如下所示:
#ifndef SORTING_H
#define SORTING_H
#include <vector>
class Sorting {
private:
Sorting();
Sorting(const Sorting& orig);
virtual ~Sorting();
public:
static void bubbleSort(std::vector<int>& A);
// etc
};
#endif /* SORTING_H */
現在,由於構造函數是私有的,因此用戶無法實例化我的類-它實際上只是用戶可以調用的靜態函數的持有者。 但是,到目前為止,從我閱讀的C ++以及查看STL庫等的角度來看,我認為我做錯了。 我應該使用名為“排序”的名稱空間還是類似的名稱? 如果是這樣,我的頭文件(用戶將包含的頭文件)是什么樣的? 我是否需要更改其余文件的結構? 目前,每組算法都在其自己的cpp文件中(即BubbleSort.cpp,CocktailSort.cpp等)。
道歉,可能是一個重復的問題-我確實搜索了C ++和名稱空間,但是我得到了有關名稱空間的非常普遍的問題,似乎沒有一個特定的問題。
使用名稱空間。 代碼的調用者將不必在意。 另外,您需要以任何可排序類型為模板-僅對整數向量排序的排序是很糟糕的。 遵守std :: sort提供的定義。
namespace Sorting {
template<typename Iterator> void cocktail_sort(Iterator a, Iterator b) {
// implement cocktail sort
}
template<typename Iterator> void bubble_sort(Iterator a, Iterator b) {
// implement bubble sort
}
};
調用者不會在乎您是否靜態地在類中,但是簡單的事實是,您浪費了語義和時間在類中,並且它不能准確地表示意圖。 本身沒有錯,但這有點不好。 使用命名空間還允許調用者使用using命名空間Sorting; 語義。
沒關系,命名空間中的自由函數可以實現相同的功能。 調用它的語法是相同的。
如果不實例化該類,我將建議使用命名空間。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.