쉬운 소리처럼 들리지만 적절한 해결책을 찾을 수 없습니다. 레지스터 할당자를 위해 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 ?
};
: 인터페이스는 같아야합니다. 그러나 나는 여러 인스턴스가 필요하고, 이것이 모든 것을 까다롭게 만든다고 생각합니다.
* 솔루션/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