簡體   English   中英

在C ++中創建一個容器“東西”來容納靜態函數。 “東西”應該是什么?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM