Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.09.2011, 20:19   #1
invector
 
Регистрация: 03.06.2011
Сообщений: 3
По умолчанию Как избежать излишнего использования ::

Здравствуйте. Есть 2 класса, которые используют друг друга. Внутри первого класса (назовем его класс A) находится несколько typedef'ов и структур, которые мне необходимо использовать во втором классе (классе B), т.е. в его реализации (файле .cpp). Включение header'a, соответствующего классу A, позволяет мне использовать его название, но его члены я могу использовать только в виде A::name. Лично мне это крайне неудобно и кажется запутывающим код.

Есть ли способ обойти это? namespace внутри описания класса не пропишешь. Использование using::A тоже ничего не изменило. Я не очень пока разбираюсь в using и namespace'ах, прочитал про них на MSDN, но решения конкретно этой проблемы не нашел. Хотелось бы увидеть какой-нибудь маленький пример на несколько строчек кода, если это вообще возможно.

Вот как примерно это пока выглядит у меня:
C3DDataContainer.h
Код:
class C3DDataContainer
{
...
	/*! Information about a section. */
	struct CSectionInfo
	{
		double				m_dLocation;
		int				m_iID;
		CMOLinear			*m_pLinear;
		CBBox				m_BBox;
		GLuint				m_nBuffer;
		int				m_nStartIndex;
		int				m_nEndIndex;

		CSectionInfo();
		CSectionInfo(const CSectionInfo &in_Source);
        }

        /*! Container for CSectionInfo. The key value for each section is the field
	 * CSectionInfo#m_dLocation value. */
	typedef std::map< double, CSectionInfo >  CSectionInfoCntnr;
	typedef CSectionInfoCntnr::value_type  CSectionInfoValue;
	typedef CSectionInfoCntnr::iterator  CSectionInfoIter;
	typedef CSectionInfoCntnr::reverse_iterator  CSectionInfoRIter;
...
};
C3DDataRecognizer.cpp
Код:
...
void C3DDataRecognizer::RgnLineCut( CSegment &in_Segment, RGNCUT_TYPE in_CutType )
{
...
C3DDataContainer::CSectionInfoIter scn;
...
}
Мне нужно избавиться от "C3DDataContainer::" во втором файле, если это возможно.

Последний раз редактировалось invector; 27.09.2011 в 20:21.
invector вне форума Ответить с цитированием
Старый 28.09.2011, 04:06   #2
Alkagolik
Пользователь
 
Аватар для Alkagolik
 
Регистрация: 03.08.2009
Сообщений: 77
По умолчанию

.hpp
Код:
#include<iostream>
namespace any
{
    class someclass{
        public:
            __int64_t kvadro(int);
    };

    __int64_t kvadro(int tmp){
        return tmp * tmp;
    }
}
.cpp
Код:
#include"anyfile.h"

int main(){
    std::cout << any::kvadro(128) << std::endl;
    return 0;
}
Alkagolik вне форума Ответить с цитированием
Старый 28.09.2011, 14:54   #3
invector
 
Регистрация: 03.06.2011
Сообщений: 3
По умолчанию

Alkagolik, вроде как с функцией, если не разделять определение и реализацию в разных файлах, такое работает. Но вот в таком случае...

anyfile.h
Код:
namespace any
{
    class someclass{
        public:
            typedef int myint;
            myint kvadro(int);
    };

    int kvadro(int tmp){
        return tmp;
    }
}
anyfile.cpp
Код:
int main(){
    any::someclass::myint a;
    a = any::kvadro(128);
    return 0;
}
...Без someclass:: не обойтись никак. У меня в классе C3DDataContainer идут определения нескольких структур, а потом typedef'ы с их участием и функции, использующие эти typedef'ы. Я не могу все это вынести за пределы класса. И обратиться к ним без упоминания C3DDataContainer:: я вроде бы тоже никак не могу... Потому что это само по себе тоже условно пространство имен (хоть к нему и нельзя обратиться с помощью "using namespace"). Разве что еще один синоним покороче определить для названия класса? Но это будет странным решением.

Похоже, все же невозможно сделать именно так, как я хотел бы, если верить тому, что написано здесь:
http://stackoverflow.com/questions/7...oid-long-paths

Последний раз редактировалось invector; 28.09.2011 в 15:17.
invector вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как избежать ошибку 1004? Серёга0629 Microsoft Office Excel 31 12.07.2011 16:12
как избежать подвисания Juffin Общие вопросы Delphi 12 18.05.2011 23:41
Как избежать Selection? Мультипликатор Microsoft Office Word 10 21.06.2010 17:15
Бот - как избежать слежки? boris-blade Win Api 9 28.12.2009 09:11
как избежать кэширования в Опере rolling PHP 3 01.12.2009 18:34