

有没有人知道"类型回传"的方法
另外附上简易模拟的代码
存储:定义一个基类Base,再派生一个模板类Data,对二者再进行一次封装,构造一个Any类,使用Any类的模板构造函数来构造一个Data对象,这样就能存储任何数据类型。
取值:只能存,但还无法把元素取出,所以Any必须有一个基类Base指针的成员变量,存储构造好的Data对象,使用模板函数_Cast(),利用其模板参数Type,进行一个再将Base类强制转换为Data<Type> 对象。
基本上是这个原理吧。

#include<iostream>
#include<typeindex>
using namespace std;
class Any{
public:
template<typename T>
Any(T t) :myBase(new Data<T>(t)) { }
template<typename T>
T get() {
return dynamic_cast<Data<T>*>(myBase.get())->value;;
}
private:
class Base {
public:
virtual ~Base() {}
};
template <typename T>
class Data :public Base {
public:
typedef T value_type; //传不出去。
Data(T t) {
value = t;
}
T value;
};
unique_ptr<Base> myBase;
type_index index(void); //我想能否根据构造Data类的时候通过修改此变量,可以将函数类型传回来,但是无法用做类型名(!auto,!decltyoe),求告知方法=.=
};
int main() {
Any a(string("s123")), b = 1, c = 12.0;
cout << a.get<string>() << endl; /*调用get函数必须要填写模板参数,我感觉这样大大降低了any的作用*/
cout << b.get<int>() << endl; /*我想能否在构造的时候就确认参数的类型,保证get调用的时候不需要使用模板参数*/
cout << c.get<double>();
return 0;
}