如何为不同的模板专业化制作一个计数器
How to make one counter for different template specializations?
#include<string>
#include<iostream>
using namespace std;
template<class T>
class Student_Grades
{
string name;
int NoExams;
T *grades_ptr;
static int counter;
public:
Student_Grades(string n, int no)
{
name=n;
NoExams=no;
grades_ptr=new T[no];
counter++;
}
void Print()
{
cout<<"Name: "<<name<<endl;
cout<<"NoExams: "<<NoExams<<endl;
for(int i=0; i<NoExams; i++)
{
cout<<"Grade "<<i+1<<": "<<grades_ptr[i]<<endl;
}
cout<<endl<<endl;
}
void set_grade(int index, T grade)
{
grades_ptr[index]=grade;
}
T get_grade(int index)
{
return grades_ptr[index];
}
int get_counter()
{
return counter;
}
~Student_Grades()
{
delete[] grades_ptr;
counter--;
}
};
此代码将为每个模板专用化创建一个不同的计数器。如何使计数器全局化,这意味着每次创建对象时它都会递增?在 Main 中,我创建了 3 个Student_Grades对象,其中一个具有 int 专用化。一个带双倍,一个带字符。计数器给我 1。我如何让它给我 3?
您可以使用基类,其目的是计算实例数:
#include<cassert>
struct B {
B() { cnt++; }
virtual ~B() { cnt--; }
static int cnt;
};
int B::cnt = 0;
template<typename T>
struct D: B {
D(): B{} { }
};
int main() {
D<int> d1;
D<float> d2;
assert(B::cnt == 2);
}
这样,它就不依赖于专业化的类型。
一个稍微可配置的解决方案是这个:
#include<cassert>
struct C {
C() { cnt++; }
virtual ~C() { cnt--; }
static int cnt;
};
int C::cnt = 0;
template<typename T, class Counter = C>
struct D: Counter { };
int main() {
D<int> d1;
D<float> d2;
assert(C::cnt == 2);
}
如果您不想依赖继承,请使用此选项:
#include<cassert>
struct C {
C() { cnt++; }
~C() { cnt--; }
static int cnt;
};
int C::cnt = 0;
template<typename T, class Counter = C>
struct D { const Counter c; };
int main() {
D<int> d1;
D<float> d2;
assert(C::cnt == 2);
}
等等...
相关文章:
- 如何创建一个CMake变量,除非显式重写,否则使用默认值
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- 运行同一解决方案的另一个项目的项目
- 挂起和取消挂起一个文件DLL
- 用C++中的一个变量定义一个常量
- 为什么它不是一个不确定的循环,因为循环计数器在整数变量的范围之外
- MPI一个计数器用于所有进程
- 如何为不同的模板专业化制作一个计数器
- 如何制作一个基本的FPS计数器
- 为什么只有一个锁和一个原子计数器的条件变量会错误地唤醒
- 为什么这个计数器以这种方式增加,而不是在这个分而治之算法中一个接一个地增加
- C ++我的计数器增加了一个额外的计数
- 我想在循环 c++ 中将计数器增加一个
- 我想开发一个函数,它接受任何类型的向量并返回一个映射(类似于 python 中的计数器)
- 在c++中创建一个静态类计数器(java示例)
- 如何将计数器变量从一个函数传递到main函数
- 在堆栈程序中实现一个计数器,用于计算对象移动的次数
- 使用std::bitset实现一个二进制计数器
- 如何制作一个计数器来计算用户输入的奇数和偶数的个数?