C++可不可以知道一个模板类被特化了多少次

C++能否知道一个模板类被特化了多少次?
我在想一个技术问题----模板代码能否探测到自身被特化了多少次?

不能直接用搜代码的方式准确的知道一个模板被特化了多少次:
因为,模板可以被特化,或者被继承类偏特化。如果有复杂的模板继承关系的话,那么特化的次数是可能一个指数。

所以我想请教各位高手,假设我希望写下面的一段代码:

template<class T>
class Hello
{
   //加入了某些代码,以及变量int i;
...
}

int main()
{
   //我有很多特化Hello模板类及其继承类的代码
   Hello<int> ...
   Hello<ABC> ...

   cout<<i<<endl;//这个i打印出Hello被特化了多少次.
   return 0;
}

如果i不在Hello这个模板类里面声明,在其他地方存在也可以。总之,我的需求就是:c++程序本身是否有能力知道,某个模板被特化了多少次,并且程序本身打印出来?
不知道模板元编程之类的技术是不是能做到?

谢谢。
------解决思路----------------------
引用:
定义全局变量int i,然后在Hello的构造函数里面把i++就可以了。

这个只能知道各种特化的类的实例有多少个,而不是特化的类有多少个。
比如:
template<class T>
class Hello
{
   public:
    Hello()
    {
        i++;
    }
    static int i;
...
}
int Hello::i=0; 


int main()
{
   //我有很多特化Hello模板类及其继承类的代码
   Hello<int> a,b,c;
   Hello<ABC> d,e,f;
 
   cout<<i<<endl;//这里i应该是6,而类特化应该是2个
   return 0;
}

------解决思路----------------------
不好意思,说错了,楼主的意思其实不是特化。特化一般是指这种情况:
template<typename T1, typename T2>  
class Test  
{  
public:  
    Test(T1 i,T2 j):a(i),b(j){cout<<"模板类"<<endl;}  
private:  
    T1 a;  
    T2 b;  
};  
  
template<>  
class Test<int , char>  
{  
public:  
    Test(int i, char j):a(i),b(j){cout<<"全特化"<<endl;}  
private:  
    int a;  
    char b;  
};  
  
template <typename T2>  
class Test<char, T2>  
{  
public:  
    Test(char i, T2 j):a(i),b(j){cout<<"偏特化"<<endl;}  
private:  
    char a;  
    T2 b;  
};  

------解决思路----------------------
引用:
Quote: 引用:

定义全局变量int i,然后在Hello的构造函数里面把i++就可以了。

这个只能知道各种特化的类的实例有多少个,而不是特化的类有多少个。
比如:
template<class T>
class Hello
{
   public:
    Hello()
    {
        i++;
    }
    static int i;
...
}
int Hello::i=0; 


int main()
{
   //我有很多特化Hello模板类及其继承类的代码
   Hello<int> a,b,c;
   Hello<ABC> d,e,f;
 
   cout<<i<<endl;//这里i应该是6,而类特化应该是2个
   return 0;
}


hash_map<const char *, int> g_obj_map;

    Hello()
    {
        g_obj_map.insert(make_pair<const char *, int>(typeid(T).name(), 1));
    }

cout << "size: " << g_obj_map.size() << endl;

------解决思路----------------------
引用:
Quote: 引用:

Quote: 引用:

定义全局变量int i,然后在Hello的构造函数里面把i++就可以了。

这个只能知道各种特化的类的实例有多少个,而不是特化的类有多少个。
比如:
template<class T>
class Hello
{
   public:
    Hello()
    {
        i++;
    }
    static int i;
...
}
int Hello::i=0; 


int main()
{
   //我有很多特化Hello模板类及其继承类的代码
   Hello<int> a,b,c;
   Hello<ABC> d,e,f;
 
   cout<<i<<endl;//这里i应该是6,而类特化应该是2个
   return 0;
}


hash_map<const char *, int> g_obj_map;

    Hello()
    {
        g_obj_map.insert(make_pair<const char *, int>(typeid(T).name(), 1));
    }

cout << "size: " << g_obj_map.size() << endl;


这个解决方案可行。用classType的map,其实用set也可以,反正重复的会覆盖