Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/140.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 递归类型的模板专门化_C++_Templates - Fatal编程技术网

C++ 递归类型的模板专门化

C++ 递归类型的模板专门化,c++,templates,C++,Templates,我正在为一个大型代码库创建一个instrumentation类,为此,我创建了一个类,如下所示: template <class T> class stats:public singleton<stats<T> >{...}; template类stats:publicsingleton{…}; singleton类的定义正如您从上面所期望的,它不是我可以控制的类。因为我只希望每个类型有一个stat实例,我正在收集的统计数据应该是一个单例,在我们的代码库中

我正在为一个大型代码库创建一个instrumentation类,为此,我创建了一个类,如下所示:

template <class T> class stats:public singleton<stats<T> >{...};
template类stats:publicsingleton{…};
singleton类的定义正如您从上面所期望的,它不是我可以控制的类。因为我只希望每个类型有一个stat实例,我正在收集的统计数据应该是一个单例,在我们的代码库中,我们禁止自定义单例类(否则我将实现我自己的单例接口,从而防止我面临的问题) 问题是,我也想为singleton提供工具,因此将出现以下情况:

someTooledClass();
-> stats<someTooledClass>
-> singleton<stats<someTooledClass> >
-> stats<singleton<stats<someTooledClass> > >
etc.
someTooledClass();
->统计数据
->独生子女
->统计数据
等
我的问题是我能专门研究统计数据吗?因为T是未知的,我甚至不确定它是如何工作的。 理想情况下,我不希望
stats
存在,但我确实希望所有其他
stats
存在。 我只是以前从来没有做过这样的事。。。所以我有点困惑

编辑: 我想我会把这个放在这里的原因。 工具化singleton是可能的,因为我正在全局覆盖构建中所有类的new和delete到我自己的自定义类,因为singleton在构建路径中(确实必须如此),所以我可以用这种方式来工具化它。 作为背景,我被赋予的任务是创建一个内存管理器,这样我就知道我要做什么了(我想……但这实际上是一个独立的问题)。但现在我正试图收集所有当前使用的内存分配的统计数据,这些内存分配是按什么类型划分的,而不仅仅是按大小类划分的

你试过了吗

请注意,您不能使该类不存在,但可以使其不从singleton继承,以便断开该链

template <class T>
class stats<singleton<stats<T> > > {};
模板
类stats{};

singleton
…不是我可以控制的类”。。。“我想工具的单身以及”。听起来像是一个相互冲突的要求。您在哪里添加允许您“使用单例工具”的代码?我是全局重写new,它将在需要时创建stats实例,然后返回他们要求的值(在收集所需的度量之后)@Robopanda333:通常情况下,
操作符new
从不为单例调用。此外,global
operator new
不知道它是为什么类型分配内存的。我知道我所做的以一种难以置信的方式中断了(我有一个全局重新定义的new,这是我的类的新闻…耶!)我不知道我可以更改特定专门化的类定义,但这是有意义的。我会试试看会发生什么。这不是我想要的,就像你说的。但它确实解决了问题。