我有一个将被实例化数百万次的类。这是一个 C++ 模板。该类跟踪每个值的计数,并且这些值是类型的T
(T
模板参数在哪里)。
我有一个特殊情况,其中计数是被跟踪的值。在这种情况下,我想省去模板化的实例变量,而只需要计数。
例如,这是一个程序:
#include <stdio.h>
#include <iostream>
#include <stdint.h>
template <typename T>
class A {
private:
T var_;
uint64_t count_;
public:
A(T v):var_(v),count(0){ }
uint64_t count() const { return count_;}
T var() const { return var_;}
void inc_count();
};
template <typename T> void A<T>::inc_count() {
count_++;
};
template <typename T> std::ostream & operator <<(std::ostream &os, const A<T> &e) {
os << e.count() << "=" << e.var();
return os;
};
int main(int argc,char **argv)
{
A<int> a(3);
a.inc_count();
std::cout << a << "\n";
a.inc_count();
std::cout << a << "\n";
}
我希望能够实例化为:
A<uint64_t> deg(1);
在这种情况下,我希望将count_
变量设置为1
并让方法var()
return count()
。
有没有办法做到这一点?
(这是一个人为的例子,但它是我遇到的问题的本质。)