|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
31.01.2012, 14:53 | #1 |
Новичок
Джуниор
Регистрация: 31.01.2012
Сообщений: 3
|
беда с typename
Добрый день. Смешной вопрос, но ответа не знаю... (
Задача: вынести из хэдера описание метода в файл inl. Не могу заставить скомпилироваться конструкцию, которая опишет тело метода... HEADER template<class T, class G> class Logic: public OtherClass { public: typedef localname::intrusive_ptr<G> LPG; typedef std::vector<LPG> GList; ... CREF(GList) getG () const; ... } INLINE template<class T, class G> inline typename CREF(Logic<T, G>::GList) Logic<T,G>::getG() const { ... } где #define CREF(A) const A& Так вот. Вся проблема в этом самом макросе. Не могу его приткнуть так, чтобы конструкция стала валидной. Есть ограничения: вводить новые типы нельзя. И без макроса работает... Но нужно именно с ним конструкцию построить Спасибо |
01.02.2012, 12:32 | #2 | |
C++ hater
СтарожилДжуниор
Регистрация: 19.07.2009
Сообщений: 3,333
|
2impus
1. выдавать из класса наружу члены-данные, а тем более контейнер - плохая идея. добавь в класс нужные тебе методы для работы с контейнером. 2. Цитата:
3. Код:
Код:
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay
My other car is cdr. Q: Whats the object-oriented way to become wealthy? A: Inheritance Последний раз редактировалось pproger; 01.02.2012 в 13:47. |
|
01.02.2012, 20:32 | #3 |
Новичок
Джуниор
Регистрация: 31.01.2012
Сообщений: 3
|
Спасибо большое за развернутый ответ, но дело в том, что мне надо внести озвученные изменения в уже существующий код. Я не могу отказаться от макроса. Мне сказали вынести описания методов в отдельный файл, потому что код стал некомфортно читаем.
Определение от реализации отделять технически можно. Есть методы в этом классе, типа Logic<T, G>::GList И они прекрасно компилируются. Возможно сделать конструкцию валидной? |
01.02.2012, 21:57 | #4 | |
C++ hater
СтарожилДжуниор
Регистрация: 19.07.2009
Сообщений: 3,333
|
2impus
Цитата:
самый ближайший к валидному коду (но тем не менее, он нерабочий) это Код:
Код:
Код:
Проблема в том, что препроцессор разработан для использования в языке СИ, где таких проблем нет. в С++ препроцессор себя изжил. если твой компилятор поддерживает следующую конструкцию, можешь попробовать написать так: Код:
но опять же. НЕЛЬЗЯ, НЕЛЬЗЯ ТАК ПИСАТЬ В С++. Как быть в данной ситуации? Заменить макрос на шаблон! Код:
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay
My other car is cdr. Q: Whats the object-oriented way to become wealthy? A: Inheritance |
|
02.02.2012, 13:10 | #5 |
Новичок
Джуниор
Регистрация: 31.01.2012
Сообщений: 3
|
спасибо большое :-)
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Беда капец!!! | VintProg | Операционные системы общие вопросы | 18 | 31.08.2011 16:25 |
Беда с windows.h | nury | Visual C++ | 7 | 16.08.2011 10:15 |
беда | Морячок | Паскаль, Turbo Pascal, PascalABC.NET | 3 | 05.06.2010 15:41 |