在C++中创建一个容器'thing'来保存静态函数."东西"应该是什么?

Ste*_*hen 5 c++ static-methods namespaces

我目前正在构建一组常用函数(搜索算法实现),并认为我正在进行分组错误.目前,我有一个类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 */
Run Code Online (Sandbox Code Playgroud)

现在,因为构造函数是私有的,所以用户无法实例化我的类 - 它实际上只是用户可以调用的静态函数的持有者.但是,从我到目前为止读到的C++ - 以及查看STL库等 - 我认为我做错了.我应该有一个名为"排序"的名称空间或类似的东西吗?如果是这样,我的头文件(用户将包含的头文件)是什么样的?我是否必须更改其余文件的结构?目前,每组算法都在自己的cpp文件中(即BubbleSort.cpp,CocktailSort.cpp等).

抱歉可能是一个重复的问题 - 我确实搜索了C++和命名空间,但我对命名空间有了非常普遍的问题,似乎没有一个是这个特定的问题.

Pup*_*ppy 4

使用命名空间。代码的调用者不需要关心。此外,您需要在任何可排序类型上进行模板化 - 只能对整数向量进行排序的排序是相当糟糕的。遵循 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
    }
};
Run Code Online (Sandbox Code Playgroud)

调用者不会关心您是否静态地位于类中,但简单的事实是您将其放在类中浪费了语义和时间,并且它不能准确地表示意图。这本身并没有错,但有点糟糕。使用命名空间还允许调用者使用 using 命名空间进行排序;语义。