系列入口:
编程实战:类C语法的编译型脚本解释器(系列)-CSDN博客
本文讲解插件(自定义函数)的接口。
一、插件接口
//插件struct CPlugin{string plugin_name;Variable::types plugin_return_type;CPlugin() :plugin_name(""), plugin_return_type(Variable::NULLVARIABLE) {}CPlugin(char const* _name, Variable::types _type) :plugin_name(_name), plugin_return_type(_type) {}virtual string& help(string& ret){ret = plugin_name + " : 返回值 " + Variable::TypeStr(plugin_return_type) + "\r\n";return ret;}virtual bool CheckPlugin(CZBVector<Variable >& params, void*& pc, string& msg) = 0;virtual bool ExecFunction(CZBVector<Variable >& params, void* const& pc, Variable& ret, string& msg, void* pe) = 0;};
二、插件管理器
//插件表class CPluginMap{public:struct HANDLE{string plugin_name;bool isNULL()const { return 0 == plugin_name.size(); }};private:static map<string, CPlugin*>& GetPluginMap();public:template<typename T>static void addplugin(map<string, CPlugin*>& mapPlugins);static bool AddPlugin(char const* name, Variable::types type, CPlugin* p);static CPlugin* GetPlugin(string const& fun_name);static CPlugin* GetPlugin(HANDLE const& h);static string& PluginHelp(string& ret);};
(我还没写完)
(这里是结束)