有关模板的一个问题
有一个类
template<class T>
class Cn{
string name;
};
如果希望别人用Cn<T> x时, x.name就自动等于T的名字,如:Cn<int> x的时候, x.name就自动等于"int"
这种功能可以实现吗?
[解决办法]
T i();
typeid(i).name?
需要做成template class么?
好像你的template类写错了
[解决办法]
写一个构造函数
然后通过#include <typeinfo>里面的东西来确定类型
没研究过,是个思路,不知可行否
[解决办法]
比较土。。
#include <typeinfo>template <class T> class Cn{ public: Cn () { if (typeid(T) == typeid(int)) { name = "int"; } else if (typeid(T) == typeid(double)) { name = "double"; } else if (typeid(T) == typeid(char)) { name = "char"; } else if (typeid(T) == typeid(float)) { name = "float"; } //..... } string name; }
[解决办法]
typeid(T).name() 似乎这样可以吧
[解决办法]
没问题,看下面这个例子
#include "windows.h" #include <iostream > #include <vector > template <class T > class Cn{public: Cn() : name( typeid(T).name() ) { } const std::string & GetName() { return name; }private: std::string name; }; int main() { using namespace std; Cn< int > test1; cout << test1.GetName().c_str() << endl; Cn< float > test2; cout << test2.GetName().c_str() << endl; system( "pause" );}