使用带有单例的模板的 C++
c++ using templates with a 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;
单例是不好的,但至少你可以使用更简单的实现:
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);
您可以使用函数模板
类似的东西
...
template <typename T>
void portit(T theArray[])
{
//sort array someway
}
...
所以像...
template <typename T>
class porter<T> {
public:
template <typename T>
static porter<T> * getInstance() {
}
private:
static porter<T> * instance;
}
???注意:这可能无法编译。自从我涉足模板以来已经有一段时间了。
这绝对是可能的,但在我看来,在开始编码之前,你应该真正考虑整个事情的设计,特别是如果你想在类中有另一种模板类型。
至于你是要每个类一个单例,还是所有实例一个单例......嗯,这有点复杂。
相关文章:
- 为什么在单例中,检查类==空?
- C++ 实现模板单例类时出现链接错误
- 在类中存储单例的指针
- C++中的单例实现在调用 getInstance 函数时不会产生相同的类实例
- 具有非默认构造函数的单例类
- 使用 std::call_once 实现类似单例的功能
- 为什么单例使用指针而不是引用?
- 提升单例池release_memory vs purge_memory
- 具有 QObject 继承的单例 - Qt
- 单例类析构函数无法清理 (SDL_Quit) MinGW
- C++单例,不会为此文档加载任何符号
- 使用 CRTP 实现单例
- C++单例模板类使我的程序崩溃
- 初学者C++线程安全单例设计
- 派生类是单例是否是一种好的做法
- _CrtIsValidHeapPointer(块)错误在应用单例-帕特恩后退出主窗口时引发
- 在这种单例实施中,是否可以对两个商店重新排序?
- 这是MSVC 2013中具有共享PTR的单例的正确实现吗?
- C++ 单例实现 迈耶与call_once
- 如何析构单例实例,或者为什么以下代码适用于析构函数?