是否可以将模板与以下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);