Обновить
20
@moadibread⁠-⁠only

Пользователь

Отправить сообщение
Согласен, просто дело в том, что у меня часть полей и методов вне pImpl'а, грубо говоря, класс Texture2D в любой реализации будет иметь width и height и какой-то общий функционал. Поэтому их я оставляю в самом классе. Отсюда и вот эти pImpl->. Так-то да, специфичные вещи в сам pImpl выношу.
>такой умный хак будет неизменно полезен всегда, когда IDE нет под рукою, а есть простой текстовый поиск
Ну не для c/c++, потому что:
— Вам надо искать либо в хидерах, а там встретится, разве что реализация шаблона, хотя лично я их выношу в .inl файлы.
— Либо в этом же .c/.cpp файле, а тогда с большой степенью вероятностью объявление функции будет первым, что найдется, если только не делали forward declaration
Ага, Муад'Диб =)
Я и пользовался pImpl'ом, желая скрыть gl.h, d3d10.h, хидеры зависимостей. С этой задачей он справляется замечательно :)
Обращение внутри реализации и только.

Getter'ы не совсем-то, попробую объяснить, name — это специфичное для opengl-реализации поле(хендл ресурса), в d3d реализации например указатель на интерфейс.

А вы не перепутали блог? :)
ой, отправилось как-то o_O предыдущий комментарий читать без последней строчки

c pImpl'ом интереснее
xTimer* timer = new xTimer()

Но когда я у себя в коде написал
glAttachShader(pImpl->mProgram, pImpl->mVertexShader->pImpl->mName);
задумался, наверное что-то не так…

Как-то это можно красиво разрулить?

Реализация gpu-программы использует вершинный шейдер и должна знать о его реализации.
Мне понравилось, как pImpl позволяет скрыть реализацию.
К примеру, взять класс таймера, с разной реализацей для windows и linux

Можно конечно сделать так:
xTimer* timer = xTimer::Create();

Но с pImpl'ом интереснее:

glAttachShader(pImpl->mProgram, pImpl->mVertexShader->pImpl->mName);
Позаимствовал у бота в counter-strike, потому что созвучно с именем персонажа книги :)
Извиняюсь, я по верхам пробежался. Смотрел преимущественно сами вопросы, поэтому проглядел :)
Да почему «тонкостями»-то?.. Что за отношение к программированию?

Вы мне напоминаете студентов ВУЗа, с которыми я, учась в своем ВУЗе, ну, скажем так, «конкурировал». Они на любой практический вопрос любили отвечать «Ой, да зачем это знать? Нас учат учиться. Захотим — узнаем», при этом большинство из них так ничего и не узнали ни тогда, ни позже.

Это далеко не тонкости, не трюки, обычные вопросы, не сложные. Любой человек, который пишет(не знает в совершенстве, а просто пишет) программы на С++ должен знать на них ответы.
Если есть вопрос про volatile, почему нет про explicit или mutable? :)
У-у, тогда я неправильно проголосовал :) Т.к. один только print'n'play настольной игры — 82 файла…

А зачем Вам число файлов? Просто те же аудиокниги — тоже разбиты на части.
У меня были «гоночки», но очень нравилась та, где водолаз за сокровищами бегает. Не знаю почему :) Может быть потому что её у меня не было.
Я сейчас закрытый проект веду на assembla.com, а другой перевел на github и не могу найти, как удалить его на assembla :) Был очень удивлен отсутствием такой возможности.
ГитХаб :) Потому что, нравится идея с форками и пулреквестами.
А почему Вы решили, что будет использован конструктор копирования? Компилятор не глупый :)
Значит показалось :) Согласитесь, мёд вкусный и полезный? :)
А вы если случайно ложку дёгтя уроните в бочку с мёдом, тоже вот такой вот статьей разразитесь, что дескать мёд какой-то невкусный получился? :)

Это я к чему? К тому, что программист в любом случае должен быть аккуратным, независимо от того, следит за его косяками язык или нет. И уж не соглашусь, что std::string a() — классика, бред это, по рукам давать программисту прутом железным, чтобы неповадно было.

«Программа делает то, что вы ей сказали делать, а не то, что хотели бы, чтобы она делала.»

Информация

В рейтинге
Не участвует
Откуда
Ульяновск, Ульяновская обл., Россия
Зарегистрирован
Активность