本文整理汇总了C++中MethodList::end方法的典型用法代码示例。如果您正苦于以下问题:C++ MethodList::end方法的具体用法?C++ MethodList::end怎么用?C++ MethodList::end使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类MethodList
的用法示例。
在下文中一共展示了MethodList::end方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: release
LuaExportTypeDescriptor::~LuaExportTypeDescriptor()
{
//释放类方法
for (MethodMap::iterator it = _classMethods.begin(); it != _classMethods.end(); it++)
{
MethodList methodList = it -> second;
for (MethodList::iterator mit = methodList.begin(); mit != methodList.end(); mit++)
{
(*mit) -> release();
}
}
//释放实例方法
for (MethodMap::iterator it = _instanceMethods.begin(); it != _instanceMethods.end(); it++)
{
MethodList methodList = it -> second;
for (MethodList::iterator mit = methodList.begin(); mit != methodList.end(); mit++)
{
(*mit) -> release();
}
}
//释放属性
for (PropertyMap::iterator it = _properties.begin(); it != _properties.end(); it++)
{
it -> second -> release();
}
}
示例2: filterMethod
LuaExportMethodDescriptor* LuaExportTypeDescriptor::filterMethod(std::string const& methodName, LuaArgumentList arguments, bool isStatic)
{
MethodList methodList;
if (isStatic)
{
MethodMap::iterator mapIt = _classMethods.find(methodName);
if (mapIt != _classMethods.end())
{
methodList = mapIt -> second;
}
}
else
{
MethodMap::iterator mapIt = _instanceMethods.find(methodName);
if (mapIt != _instanceMethods.end())
{
methodList = mapIt -> second;
}
}
if (methodList.size() > 1)
{
LuaExportMethodDescriptor *targetMethod = NULL;
int startIndex = isStatic ? 0 : 1;
if (arguments.size() > startIndex)
{
//带参数
std::deque<std::string> signList;
std::string signListStr;
std::string signStrRegexp;
for (LuaArgumentList::iterator it = arguments.begin() + startIndex; it != arguments.end(); it++)
{
LuaValue *value = *it;
switch (value -> getType())
{
case LuaValueTypeNumber:
signList.push_back("N");
signListStr += "N";
signStrRegexp += "[[email protected]]";
break;
case LuaValueTypeBoolean:
signList.push_back("B");
signListStr += "B";
signStrRegexp += "[[email protected]]";
break;
case LuaValueTypeInteger:
signList.push_back("I");
signListStr += "I";
signStrRegexp += "[[email protected]]";
break;
default:
signList.push_back("O");
signListStr += "O";
signStrRegexp += "@";
break;
}
}
std::string luaMethodSignStr = methodName + "_" + signListStr;
MappingMethodMap::iterator methodIt = _methodsMapping.find(luaMethodSignStr);
if (methodIt == _methodsMapping.end())
{
//映射表无该方法,查找匹配方法
MethodList matchMethods;
std::regex regExp(signStrRegexp);
for (MethodList::iterator methodIt = methodList.begin(); methodIt != methodList.end(); methodIt ++)
{
LuaExportMethodDescriptor *methodDesc = *methodIt;
if (std::regex_match(methodDesc -> methodSignature(), regExp))
{
matchMethods.push_back(methodDesc);
}
}
if (matchMethods.size() > 0)
{
//选择最匹配的方法
//备选方法,如果没有最匹配的情况下使用
LuaExportMethodDescriptor *alternateMethod = NULL;
for (MethodList::iterator methodIt = matchMethods.begin(); methodIt != matchMethods.end(); methodIt ++)
{
LuaExportMethodDescriptor *methodDesc = *methodIt;
bool hasMatch = true;
bool hasAlternate = false;
for (int i = 0; i < methodDesc -> methodSignature().length(); i++)
{
if (i < signList.size())
{
std::string luaSign = signList[i];
char nativeSign = methodDesc -> methodSignature()[i];
if (luaSign == "N" && nativeSign != 'f' && nativeSign != 'd')
{
hasAlternate = true;
luaSign = "I";
}
//.........这里部分代码省略.........