保罗万象的对象——Variant
对一个对象设置其可容纳的多种类型
通过类型对对象进行Set和Get,类型之间互不影响,一个类型只能又一个值
variant.h
/*
* variant.h
*
* Created on: 2012-3-9
* Author: vivence
*/
#ifndef VARIANT_H_
#define VARIANT_H_
namespace ghost{
template<typename... Tn>
class Variant;
template<>
class Variant<>{};
template<typename T, typename... Tn>
const T& GetVariant(const Variant<T, Tn...>& t);
template<typename T, typename... Tn>
T& GetVariant(Variant<T, Tn...>& t);
template<typename T, typename... Tn>
class Variant<T, Tn...> : public Variant<Tn...>{
T v_;
public:
const T& GetValue() const{return v_;}
T& GetValue(){return v_;}
template<typename TT>
const TT& Get() const{return GetVariant<TT>(*this);}
template<typename TT>
TT& Get(){return GetVariant<TT>(*this);}
template<typename TT>
void Set(const TT& t){Variant<Tn...>::Set(t);}
void Set(const T& t){v_ = t;}
};
template<typename T, typename... Tn>
const T& GetVariant(const Variant<T, Tn...>& t){return t.GetValue();}
template<typename T, typename... Tn>
T& GetVariant(Variant<T, Tn...>& t){return t.GetValue();}
} // namespace ghost
#endif /* VARIANT_H_ */
test.cpp
/*
* test.cpp
*
* Created on: 2012-3-9
* Author: vivence
*/
#include "variant.h"
#include <iostream>
#include <iomanip>
int main()
{
ghost::Variant<int, bool, char> test;
test.Set(1);
test.Set(false);
test.Set('a');
test.Set('b');
std::cout<<test.Get<int>()<<std::endl;
std::cout<<std::boolalpha<<test.Get<bool>()<<std::endl;
std::cout<<test.Get<char>()<<std::endl;
return 0;
}
By Evil.Ghost
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构