当前位置: 首页>>代码示例>>C++>>正文


C++ CharString::c_str方法代码示例

本文整理汇总了C++中CharString::c_str方法的典型用法代码示例。如果您正苦于以下问题:C++ CharString::c_str方法的具体用法?C++ CharString::c_str怎么用?C++ CharString::c_str使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在CharString的用法示例。


在下文中一共展示了CharString::c_str方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。

示例1: nm


//.........这里部分代码省略.........
		INTERNAL_IF( np->GetChildPackage(0)->GetPackageID() != NAME );
		NameManager nm( GetPackageName(*np->GetChildPackage(0)), bindTable );		

		entry = IsSymbolTable(nm);
		if( !entry )
			throw 0;
		qualifierList.AddSymbolTable(entry);
		i = 1;
	}

		
	// цикл спецификации имени: сохраняем области видимости из
	// пакетов в список и получаем список ролей последнего имени
	// 'i' задается выше, при считывании начальной области видимости 
	for( ;; )
	{
		// пакет должен быть '::' и следом за ним должно идти имя
		INTERNAL_IF( np->GetChildPackage(i)->GetPackageID() != COLON_COLON );	
		i++;
		register int pid = np->GetChildPackage(i)->GetPackageID();
		INTERNAL_IF( i == np->GetChildPackageCount() || 
			(pid != NAME && pid != PC_OVERLOAD_OPERATOR && pid != PC_CAST_OPERATOR &&
			 pid != PC_DESTRUCTOR) );
		
		// получаем имя из последней полученной области видимости,
		// причем поиск нового имени производится именно в ней, без учета дружеских
		// областей видимости
		CharString name = GetPackageName(*np->GetChildPackage(i));
		const SymbolTable *lastSt = 
			&qualifierList.GetSymbolTable(qualifierList.GetSymbolTableCount()-1);

		// есть один момент. Если lastSt - классовая область видимости и 
		// name - такое же как имя класса, просто возвращаем список конструкторов
		// класса и выходим
		if( lastSt->IsClassSymbolTable() && 
			i == np->GetChildPackageCount()-1 &&
			static_cast<const ClassType *>(lastSt)->GetName() == name )
		{
			INTERNAL_IF( !roleList.empty() );

			// загружаем список конструкторов в список ролей
			const ConstructorList &cl =
				static_cast<const ClassType *>(lastSt)->GetConstructorList();
			for( ConstructorList::const_iterator p = cl.begin(); p != cl.end(); p++ )
				roleList.push_back( RolePair((ConstructorMethod*)*p, R_CONSTRUCTOR) );

			// если список пуст, ошибка
			if( cl.empty() )
				theApp.Error(
					ParserUtils::GetPackagePosition((NodePackage*)np->GetChildPackage(i)),
					"'%s' - конструктор еще не объявлен", name.c_str());
			break;
		}

		NameManager stm( name, lastSt, false );		// получаем список ролей имени
	
		// если мы имеем последний идентификатор, т.е.
		// то, что нам нужно в конечном итоге найти - получаем список 
		// его ролей и выходим. В случае если у имени нет ролей (не найдено),
		// все равно цикл обработки считается успешным, но выводится ошибка
		if( i == np->GetChildPackageCount()-1 )
		{
			roleList = stm.GetRoleList();
			synonymList = stm.GetSynonymList();
			if( roleList.empty() )
				theApp.Error( 
					ParserUtils::GetPackagePosition((NodePackage*)np->GetChildPackage(i)),
					"'%s' - идентификатор не найден в области видимости '%s'",
					name.c_str(),
					dynamic_cast<const Identifier *>(lastSt)->GetQualifiedName().c_str() );
			
			break;	// цикл окончен
		}

		// иначе имя должно быть областью видимости, добавляем ее в 
		// список квалификаторов имени
		else if( const SymbolTable *st = IsSymbolTable(stm) )
			qualifierList.AddSymbolTable(st);				

		// иначе возбуждаем исключительную ситуацию для вывода ошибки
		else
			throw i;	
		i++;
	}

	// ошибки типа имя не является областью видимости, в параметре
	// индекс пакета в котором содержится имя
	} catch( int pkgIx ) {

		// освобождаем память занятую списками и выводим ошибку
		roleList.clear();
		qualifierList.Clear();
		synonymList.clear();

		LexemPackage *lp = (LexemPackage *)np->GetChildPackage(pkgIx);
		theApp.Error( lp->GetLexem().GetPos(), 
			"'%s' не является квалификатором области видимости",
			lp->GetLexem().GetBuf().c_str() );
	}	
}
开发者ID:nrcpp,项目名称:nrcpp,代码行数:101,代码来源:Manager.cpp


注:本文中的CharString::c_str方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。