지금까지 내가 가진 :DLL에 클래스 카운터를 구현하는 방법은 무엇입니까?
// TypeCounter.h
template <typename Base>
class Counter : public Base
{
protected:
static int typeIndexCounter;
};
template <typename T, typename Base>
class Bridge : public Counter<Base>
{
public:
virtual ~Bridge() {}
virtual int GetTypeIndex() const
{
return TypeIndex();
}
static int TypeIndex()
{
static int typeIndex = typeIndexCounter++;
return typeIndex;
}
};
// static variable definition
template <typename Base>
int Counter<Base>::typeIndexCounter;
사용 사례 같은 것입니다 : Base
클래스의 각 종류에 따라서
class SBase
{ ... }
class S0 : public Bridge<S0, SBase>
{ ... }
class S1 : public Bridge<S1, SBase>
{ ... }
class S2 : public Bridge<S2, SBase>
{ ... }
, 내가 이제까지 인스턴스화 된 경우 (이이 파생 얼마나 많은 믿을 수있는, 당연하지).
문제는이 Counter
클래스가 DLL에 있다는 것입니다.
나는이 DLL의 여러 사용자가있는 경우, 각 사용자는 자신의 인스턴스를 것 Bridge
및 Counter
은 다음 TypeIndex()
같은 T
이러한 사용자들 사이에 다를 수 있습니다. (사용자 측 매크로를 정의하여, import
에 export
을 바꿀 것)
Counter
및
Bridge
이전
__declspec(dllexport)
을 넣어하려고했으나 사용자 측에서 컴파일 오류가 있습니다.
오류에도 불구하고 클래스 템플릿을 내보내지 않아야하므로 잘못된 접근입니다.
그래서 내가 어떻게 이것을 달성 할 수있는, 같은 T
많은 인스턴스화가있는 경우에도 TypeIndex()
특정 T
에 대해 동일하게 유지 있는지 확인하려면?
감사합니다!
'Counter' 클래스를 DLL에 넣을 수 없습니다. DLL은 템플릿이기 때문에 템플릿은 헤더 파일에만 남기 때문에 범위는 컴파일 단위입니다. 'Counter' 템플릿의 인스턴스화 *를 다른 컴파일 유닛에 넣을 수는 있지만, DLL에서 그것들을 내보낼 수 있는지 확신 할 수 없습니다. –