是否可以将模板与以下singleton类一起使用,以便能够将portit函数与任何数据类型一起使用,而不仅仅是int?这是一个非常愚蠢的主意吗?

class porter
{
private:
    static porter* instance;
    porter(){}
    ~porter(){}
public:
    static porter* getInstance()
    {
        if(!instance)
            instance = new porter();
        return instance;
    }
    void portit(int theArray[])
    {
        //sort array someway
    }
};

porter* porter::instance=NULL;

最佳答案

Singleton不好,但是至少可以使用一个更简单的实现:

class porter {
public:
    static porter& instance() { static porter P; return P; }

   template <typename T, size_t N>
    void portit(T (&array)[N]) {
        std::sort(array, array + N);
    }

private:
    porter() = default;
    ~porter() = default;
};

// usage
porter::instance().portit(somearray);


当然,使用这种单例是没有意义的。比较编写和使用一个更好的实现需要花费多长时间:

template <typename T, size_t N>
void sort(T (&array)[N]) { std::sort(array, array + N); }

// usage
sort(somearray);

07-27 18:46