是否有一种通用的方法来初始化dll的模板类的静态成员?

时间:2017-09-03 11:55:53

标签: c++ class templates static explicit

我遇到了以下问题:我想在运行时确定存在多少特定对象系列的实例(即具有相同基类的对象)。我目前的方法是使用带有静态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驻留在共享库中。

我的问题:有没有办法不依赖于显式模板实例化?

0 个答案:

没有答案