C++ Object实体类

*暂未完成,因为无尽BUG滚滚来。

好长时间没写完,一是能力不够,二是我还得给老板写WEB的代码。可是我不会WEB!js和PHP简直就是世界上最好的语言,因为它们能够让人更快地进入极乐世界。

让我写一个gm后台,他说好不好看无所谓,能用就行。于是,我就写了一个根据JSON数据自动生成页面的代码……哈哈,平均15分钟完成一个功能,简直不要太爽。懒人自然有懒办法。当然,之前写工具花费了大量时间。

回家还要玩激战2刷每日,还挺忙的……

好吧,我已经没有力气给自己吐槽了。。。所以,直接上代码吧,不废话了。

 

以下代码为C++代码。

简直通俗易懂。

 

接下来(预计实现):

1.结构改造:在代码中定义一个对象的属性关联以及拥有属性是不太方便的,应该将这种关系和数据放置于配置表中。甚至是接下来的事件类和故事(story)类也应当如此。

1.1 首先,需要定义基本动作,

1.2 定义动作指令

1.3 需要一个虚拟机,基于栈的或者是基于寄存器的。还是栈虚拟机实现更简单一点,尽管效率稍差。

1.3.1  图形界面或者脚本程序。前者对于设计师来说更加友好。

1.4 协议。应当将虚拟机生成的字节码翻译成数据发送给主程序处理。

1.5 存储。生成的字节码应该被存储在配置表或者数据库中。

1.6 处理。主程序应该有足够通用、健壮和效率的算法来处理这个字节码。

看来这是一个大工程。

 

2.集中测试(2018.11.1 19:25)

LunaObject.h

  1 #pragma once
  2 
  3 #include "stdinc.h"
  4 #include "Location.h"
  5 #include "QualitiesManager.h"
  6 #include "QualInc.h"
  7 
  8 namespace Lunacia
  9 {
 10     class ObjectInfo final
 11     {
 12     private:
 13         //info name: value pointer
 14         std::unordered_map<std::string, void*> _infos;
 15         std::unordered_map<std::string, std::function<void(const std::string&)>> _destory;
 16 
 17     public:
 18         ObjectInfo();
 19         ObjectInfo(std::unordered_map<std::string, void*>& infos);
 20         ~ObjectInfo();
 21 
 22     public:
 23         template<typename T>
 24         T& Get(const std::string& name)
 25         {
 26             if (!IsExist(name))
 27             {
 28                 ErrorThrow("The data is not exist what name is " + name);
 29             }
 30 
 31             return *(static_cast<T*>(_infos.find(name)->second));
 32         }
 33 
 34         template<typename T>
 35         void Set(const std::string& name, T& val)
 36         {
 37             auto itFound = _infos.find(name);
 38             void* pFound = nullptr;
 39             if (itFound == _infos.end())
 40             {
 41                 Add(name, val);
 42                 return;
 43             }
 44 
 45             pFound = itFound->second;
 46             T* pVal = static_cast<T*>(pFound);
 47             *pVal = val;
 48         }
 49 
 50         template<typename T>
 51         void Replace(const std::string& name, const T& value)
 52         {
 53             Delete<T>(name);
 54             Add(name, value);
 55         }
 56 
 57         template<typename T>
 58         bool Add(const std::string& name, const T& value)
 59         {
 60             T* pValue = new T();
 61             *pValue = value;
 62 
 63             std::function<void(const std::string&)> destoryFunc = [this](const std::string& n)->void
 64             {
 65                 this->Delete<T>(n);
 66             };
 67 
 68             _destory.insert(std::make_pair(name, destoryFunc));
 69             return _infos.insert(std::make_pair(name, static_cast<void*>(pValue))).second;
 70         }
 71 
 72         template<typename T>
 73         bool Delete(const std::string& name)
 74         {
 75             auto itFound = _infos.find(name);
 76             if (itFound == _infos.end())
 77             {
 78                 return false;
 79             }
 80             void* pVal = itFound->second;
 81 
 82             T* pDel = static_cast<T*>(pVal);
 83             delete pDel;
 84             pVal = nullptr;
 85 
 86             _destory.erase(name);
 87             return _infos.erase(name) == 1;
 88         }
 89 
 90         bool IsExist(const std::string& name) const;
 91     };
 92 
 93     //LunaObject//
 94     class LunaObject
 95     {
 96     public:
 97         LunaObject();
 98         virtual ~LunaObject();
 99 
100     public:
101         virtual void QualitiesCorrelation() = 0;
102 
103     public:
104         virtual ObjectInfo& Info();
105         virtual void
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值