我遇到了以下问题:我想在运行时确定存在多少特定对象系列的实例(即具有相同基类的对象)。我目前的方法是使用带有静态int值的模板类作为计数器。每次创建对象族的新实例时,我都会增加计数。
以下是一些代码:
StaticTypeCounter.h
template<class T>
class MY_API StaticTypeCounter
{
static int s_count;
public:
static inline int Increment() { return s_count++; }
static inline int Get() { return s_count; }
};
StaticTypeCounter.cpp
class base1;
class base2;
StaticTypeCounter<base1>::s_count = 0;
StaticTypeCounter<base2>::s_count = 0;
template class StaticTypeCounter<base1>;
template class StaticTypeCounter<base2>;
一些虚拟课程:
class A : public base1
{
public:
static const int STATIC_TYPE_ID;
};
class B : public base1
{
public:
static const int STATIC_TYPE_ID;
};
class C : public base2
{
public:
static const int STATIC_TYPE_ID;
};
const int A::STATIC_TYPE_ID = StaticTypeCounter<base1>::Increment(); // 0
const int B::STATIC_TYPE_ID = StaticTypeCounter<base1>::Increment(); // 1
const int C::STATIC_TYPE_ID = StaticTypeCounter<base2>::Increment(); // 0
此代码运行良好,但您必须为每个系列显式实例化StaticTypeCounter
模板。此外,您可能会将通知StaticTypeCounter
驻留在共享库中。
我的问题:有没有办法不依赖于显式模板实例化?