=====================
template<class T>
class any
{
public:
T m_data;
};
void main()
{
any<int> a;
}
缺点是 必须知道类型,有时我们并不知道某个对象的类型。
-------------
class any
{
public:
template<class T>
any(const T& t)
{
m_pData = new T(t);
}
protected:
void* m_pData;
};
void main()
{
any a(3);
}
void*是不安全的。
--------------
#include <iostream>
using namespace std ;
class any
{
public:
template<class T>
any(const T& t)
{
m_pData = new CType<T>(t);
}
//析构函数省略
class CTypeRoot
{};
template<class T>
class CType : public CTypeRoot
{
public:
CType(const T& t):m_value(t)
{
}
T m_value;
};
public:
CTypeRoot* m_pData;
};
void main()
{
any a(3);
}
可以编译通过了,但无法取值。
===============
#include <iostream>
#include <string>
using namespace std ;
class any
{
public:
template<class T>
any(const T& t)
{
m_pData = new CType<T>(t);
}
//析构函数省略
class CTypeRoot
{};
template<class T>
class CType : public CTypeRoot
{
public:
CType(const T& t):m_value(t)
{
}
T m_value;
};
public:
CTypeRoot* m_pData;
};
template<typename ValueType>
ValueType any_cast(const any& operand,const ValueType tDefault = ValueType() )
{
any::CType<ValueType>* p = static_cast<any::CType<ValueType>* >(operand.m_pData);
return p->m_value;
}
void main()
{
any a(3);
int y = any_cast<int>(a);
// string y1 = any_cast<string>(a); //运行出错
}
2021年目标:完成新书《闻缺陷则喜》,本博客右上公告有下载、阅读链接。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)