很久以前学习了刘未鹏先生的 boost源码剖析之:泛型指针类any之海纳百川(rev#2),收益颇多。想了解Boost::Any的技术,学习刘先生的大作应该是条捷径。下面这两段代码,是我学习后自己的总结。
// 非模板类的模板构造函数,使这个类可以接受任意类型的数据
#include <iostream>
#include <typeinfo>
using namespace std;
class T
{
public:
template<typename ValueType>
T(const ValueType &value){cout<<typeid(value).name()<<endl;}
};
int main(void)
{
T x("abcd");
T y(double(22.3));
return 0;
}
// 非模板基类,模板派生类,派生类保存实际的数据值,基类用来提供非泛型的访问方式。
#include <typeinfo>
#include <iostream>
using namespace std;
class B
{
public:
virtual void MyType(){}
virtual ~B(){}
};
template<typename T>
class D : public B
{
public:
D(const T& value)
{
held = value;
}
public:
void MyType()
{
cout<<typeid(T).name()<<endl;
}
T held;
};
template<typename T>
B * Create(const T& value)
{
return (new D<T>(value));
}
template<typename T>
void GetValue(B* p)
{
D<T>* x = static_cast<D<T>* >(p);
cout<<x->held<<endl;
}
int main(void)
{
B * x=Create("asdf");
x->MyType();
GetValue<char *>(x);
B * y=Create(3.14);
y->MyType();
GetValue<double>(y);
delete x;
delete y;
return 0;
}