编程实战:类C语法的编译型脚本解释器(三)
系列入口:
编程实战:类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);
};
(我还没写完)
(这里是结束)