假设我有一个函数模板func
,它使用相同的模板参数被实例化了几次。应该对具有相同模板参数的单个实例进行计数(从 0 开始),并且应该可以从func
的实现中访问实例计数。显然,静态成员不是我要寻找的。相反,在我看来,实例计数需要通过编译时类型计算来实现。
示例(用户代码):
{
for(int i=0;i<10;i++) {
func<float>(); // This should be instance number 0
}
func<float>(); // This should be instance number 1
}
尽管运行时循环,第一个实例func
的编号为 0。也就是说,在所有循环迭代中,实例编号不应更改。只有当循环退出并再次调用该函数时,该数字才应该递增,即递增到 1。
原始模板:
template<class T> void func() {}
访问实例计数的可能方法:
template<class T,int COUNT> void func() {} // instance number as template parameter
template<class T> void func(int count) {} // or as function argument
这可以用一些花哨的调用包装器来完成吗?如果是这样,怎么做?
我担心这是不可能的......但是,现在我有一个很好的用途......