听起来像一个简单的,但我不能找到一个合适的解决方案:对于寄存器分配器,我需要一个计数器,从0开始计数,并在每个分配步骤增加。我需要一个可以有多个实例的类(这很重要!),并且它有一个模板化的成员函数,它返回一个整数,这个整数的值正在递增每次通话。接口应该是这样的:放松“多个实例”的要求这可以用一个static int
局部变量来实现时多实例每类型计数器
int main() {
Counter a,b;
assert(a.plus1<int>() == 0);
assert(a.plus1<int>() == 1);
assert(b.plus1<float>() == 0);
assert(b.plus1<float>() == 1);
assert(a.plus1<float>() == 0);
}
很明显:
class Counter
{
public:
template<class T>
int plus1() {
// ?
}
private:
// what member ?
};
当人们使用它应该发挥这样的计数器。不过,我需要多个实例,并且我认为这会让整个事情变得棘手。
* SOLUTION/EDIT *
我觉得@ log0了合适的解决方案。这里的完整性全工作的C++代码11(至少它似乎工作):
class Counter
{
public:
template<class T>
int plus1() {
return counters[ std::type_index(typeid(T)) ]++;
}
private:
std::map<std::type_index, int> counters;
};
是RTTI可用吗? (在我脑海后面的邪恶dynamic_cast的想法) – Najzero
@Najzero如果不使用RTTI会更好。没有它可能吗? – ritter
@chris静态函数如何解决多实例计数器的问题? – ritter