Согласен, просто дело в том, что у меня часть полей и методов вне pImpl'а, грубо говоря, класс Texture2D в любой реализации будет иметь width и height и какой-то общий функционал. Поэтому их я оставляю в самом классе. Отсюда и вот эти pImpl->. Так-то да, специфичные вещи в сам pImpl выношу.
>такой умный хак будет неизменно полезен всегда, когда IDE нет под рукою, а есть простой текстовый поиск
Ну не для c/c++, потому что:
— Вам надо искать либо в хидерах, а там встретится, разве что реализация шаблона, хотя лично я их выношу в .inl файлы.
— Либо в этом же .c/.cpp файле, а тогда с большой степенью вероятностью объявление функции будет первым, что найдется, если только не делали forward declaration
Getter'ы не совсем-то, попробую объяснить, name — это специфичное для opengl-реализации поле(хендл ресурса), в d3d реализации например указатель на интерфейс.
Да почему «тонкостями»-то?.. Что за отношение к программированию?
Вы мне напоминаете студентов ВУЗа, с которыми я, учась в своем ВУЗе, ну, скажем так, «конкурировал». Они на любой практический вопрос любили отвечать «Ой, да зачем это знать? Нас учат учиться. Захотим — узнаем», при этом большинство из них так ничего и не узнали ни тогда, ни позже.
Это далеко не тонкости, не трюки, обычные вопросы, не сложные. Любой человек, который пишет(не знает в совершенстве, а просто пишет) программы на С++ должен знать на них ответы.
Я сейчас закрытый проект веду на assembla.com, а другой перевел на github и не могу найти, как удалить его на assembla :) Был очень удивлен отсутствием такой возможности.
А вы если случайно ложку дёгтя уроните в бочку с мёдом, тоже вот такой вот статьей разразитесь, что дескать мёд какой-то невкусный получился? :)
Это я к чему? К тому, что программист в любом случае должен быть аккуратным, независимо от того, следит за его косяками язык или нет. И уж не соглашусь, что std::string a() — классика, бред это, по рукам давать программисту прутом железным, чтобы неповадно было.
«Программа делает то, что вы ей сказали делать, а не то, что хотели бы, чтобы она делала.»
Ну не для c/c++, потому что:
— Вам надо искать либо в хидерах, а там встретится, разве что реализация шаблона, хотя лично я их выношу в .inl файлы.
— Либо в этом же .c/.cpp файле, а тогда с большой степенью вероятностью объявление функции будет первым, что найдется, если только не делали forward declaration
Getter'ы не совсем-то, попробую объяснить, name — это специфичное для opengl-реализации поле(хендл ресурса), в d3d реализации например указатель на интерфейс.
c pImpl'ом интереснее
xTimer* timer = new xTimer()Но когда я у себя в коде написал
glAttachShader(pImpl->mProgram, pImpl->mVertexShader->pImpl->mName);задумался, наверное что-то не так…
Как-то это можно красиво разрулить?
Реализация gpu-программы использует вершинный шейдер и должна знать о его реализации.
К примеру, взять класс таймера, с разной реализацей для windows и linux
Можно конечно сделать так:
xTimer* timer = xTimer::Create();Но с pImpl'ом интереснее:
glAttachShader(pImpl->mProgram, pImpl->mVertexShader->pImpl->mName);Вы мне напоминаете студентов ВУЗа, с которыми я, учась в своем ВУЗе, ну, скажем так, «конкурировал». Они на любой практический вопрос любили отвечать «Ой, да зачем это знать? Нас учат учиться. Захотим — узнаем», при этом большинство из них так ничего и не узнали ни тогда, ни позже.
Это далеко не тонкости, не трюки, обычные вопросы, не сложные. Любой человек, который пишет(не знает в совершенстве, а просто пишет) программы на С++ должен знать на них ответы.
А зачем Вам число файлов? Просто те же аудиокниги — тоже разбиты на части.
Это я к чему? К тому, что программист в любом случае должен быть аккуратным, независимо от того, следит за его косяками язык или нет. И уж не соглашусь, что std::string a() — классика, бред это, по рукам давать программисту прутом железным, чтобы неповадно было.
«Программа делает то, что вы ей сказали делать, а не то, что хотели бы, чтобы она делала.»