Re[5]: Демонстрационный код
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 30.07.10 12:14
Оценка:
Здравствуйте, Handie, Вы писали:

ГВ>>А чтобы не засирать глобальное пространство имён (если уж это становится проблемой), есть простой выход — завести свой собственный namespace.


H>Генадий, видимо Вы еще не дошли до разработки крупных систем.


Странное дело: разве до разработки крупных систем надо как-то специально "доходить"? Это просто работа, которая либо на тебя сваливается, либо ты сам её "пикапишь". Кстати, коль зашла такая пьянка: что ты имеешь в виду под крупными системами?

H>Я всегда предпочитаю forward declaration вместо включения файла


H>если строка


H>
H>class SuperClass;
H>


H>позволяет избежать


H>
H>#include "SuperClass.h"
H>


H>я всегда предпочту первый вариант


Да, это бывает полезно, если в проекте творится кавардак: все всех подозревают, левая рука не ведает, что творит правая, нет единообразного подхода к дизайну, толкового распределения задач и т.п. Короче говоря, когда все ото всех решительно изолируются самостоятельно. То есть, в общем, кое-какой шухер сбить такой подход позволяет. С другой стороны, ты лишаешься возможности включить экземпляр SuperClass-а по значению:

class SuperClass;

class MyClass : public SuperClass {...} // Болт!...

class MyClass1
{
...
  SuperClass superMember_; // ...с левой резьбой!
};


Придётся писать что-то в духе pImpl и т.п. Не то, чтобы это было плохо само по себе, но будучи принятым на уровне некоего "правила", сильно ограничивает разработчика.

Извини, что объясняю столь детально.

H>если из неймспеса мне нужно пару сущьностей, я возьму только их:


H>
H>using std::map;
H>using std::string;
H>


H>вместо засирания неймспейса


H>
H>using namespace std;
H>


Кстати, соответствующий инклюд всё равно придётся вставлять, если, конечно, ты не обходишься без использования значений соответствующих типов.

H>Не надо свое невежество выдавать за рекомендации гуру


Я не случайно оговорился в самом начале, что "я не люблю...". Всё вышесказанное как раз иллюстрирует отчасти вкусовой характер этой проблемы — для принятия точных решений нужна статистика использования типов той же STL. Не спорю, может быть, в твоём случае (да и в случае топикстартера тоже) вполне можно обойтись using-type, мне это обычно здорово мешало: писать по полтора десятка using-ов на каждом углу как-то шумновато.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re: Демонстрационный код
От: 8bit  
Дата: 30.07.10 13:13
Оценка: -1 :)
Здравствуйте, Northaunt, Вы писали:

имхо, это как бы не демострационный код для С++.

Заверните что нить эдакое с интерфейсами\наследованием\темплейтами.
Покажите что понимаете области видимости, что такое константные обьекты\методы\мутабл,
исключения как работают, оператор перегрузите ну и т.д.
Вообщем возьмите учебник по С++, пройдитесь по разделам, и найдете много чего что можно
показать в своем демонстрационном коде по С++.
Re[2]: Демонстрационный код
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 30.07.10 13:26
Оценка: +3 :)))
Здравствуйте, 8bit, Вы писали:

8>Вообщем возьмите учебник по С++, пройдитесь по разделам, и найдете много чего что можно

8>показать в своем демонстрационном коде по С++.

Представляешь, как встанут волосы дыбом у собеседователей, если последовать такому совету?
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[3]: Демонстрационный код
От: 8bit  
Дата: 30.07.10 13:35
Оценка:
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>Представляешь, как встанут волосы дыбом у собеседователей, если последовать такому совету?


Всмысле?
Re[4]: Демонстрационный код
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 30.07.10 13:41
Оценка:
Здравствуйте, 8bit, Вы писали:

ГВ>>Представляешь, как встанут волосы дыбом у собеседователей, если последовать такому совету?


8>Всмысле?


В прямом.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[4]: Демонстрационный код
От: bnk СССР http://unmanagedvisio.com/
Дата: 30.07.10 13:49
Оценка: +1 :))
Здравствуйте, 8bit, Вы писали:

8>Здравствуйте, Геннадий Васильев, Вы писали:


ГВ>>Представляешь, как встанут волосы дыбом у собеседователей, если последовать такому совету?


8>Всмысле?


Ну вот смотри например — использование boost, как тут недавно советовали
Автор: BulatZiganshin
Дата: 28.07.10
:

int main(int argc, char* argv[]) {
  typedef std::map<std::string, std::pair<int, int> > map_type;
  map_type files;
  files["0.txt"] = std::make_pair(0, 7);
  files["1.txt"] = std::make_pair(8, 41);
  files["2.txt"] = std::make_pair(42, 50);
  int num = 21;
  map_type::const_iterator elem;
  elem = std::find_if(
                      files.begin(),
                      files.end(),
                      boost::bind(
                                  std::logical_and<bool>(),
                                  boost::bind(
                                              std::less_equal<int>(),
                                              boost::bind(
                                                          &map_type::value_type::second_type::first,
                                                          boost::bind(
                                                                      &map_type::value_type::second,
                                                                      _1)
                                                          ),
                                              num),
                                  boost::bind(
                                              std::greater_equal<int>(),
                                              boost::bind(
                                                          &map_type::value_type::second_type::second,
                                                          boost::bind(
                                                                      &map_type::value_type::second,
                                                                      _1)
                                                          ),
                                              num)));
  if (elem != files.end())
    std::cout << "Found in " + (*elem).first + "\n";
  return 0;
}

Блэкджек и шлюхи отдыхают
IMHO, всякая заумь — это детская (?) болезнь, которой топикстартер к счастью не страдает.
Re[5]: Демонстрационный код
От: 8bit  
Дата: 30.07.10 13:51
Оценка:
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>Здравствуйте, 8bit, Вы писали:

8>Вообщем возьмите учебник по С++, пройдитесь по разделам, и найдете много чего что можно
8>показать в своем демонстрационном коде по С++.
ГВ>>>Представляешь, как встанут волосы дыбом у собеседователей, если последовать такому совету?
8>>Всмысле?
ГВ>В прямом.

От чего волосы-то дыбом?
Если что, я не имел ввиду переписать себе код из книжки или написать примеры для всего и вся
Re[5]: Демонстрационный код
От: denisko http://sdeniskos.blogspot.com/
Дата: 30.07.10 13:58
Оценка:
Здравствуйте, bnk, Вы писали:


bnk>Ну вот смотри например — использование boost, как тут недавно советовали
Автор: BulatZiganshin
Дата: 28.07.10
:


bnk>
bnk>int main(int argc, char* argv[]) {
bnk>  typedef std::map<std::string, std::pair<int, int> > map_type;
bnk>  map_type files;
bnk>  files["0.txt"] = std::make_pair(0, 7);
bnk>  files["1.txt"] = std::make_pair(8, 41);
bnk>  files["2.txt"] = std::make_pair(42, 50);
bnk>  int num = 21;
bnk>  map_type::const_iterator elem;
bnk>  elem = std::find_if(
bnk>                      files.begin(),
bnk>                      files.end(),
bnk>                      boost::bind(
bnk>                                  std::logical_and<bool>(),
bnk>                                  boost::bind(
bnk>                                              std::less_equal<int>(),
bnk>                                              boost::bind(
bnk>                                                          &map_type::value_type::second_type::first,
bnk>                                                          boost::bind(
bnk>                                                                      &map_type::value_type::second,
bnk>                                                                      _1)
bnk>                                                          ),
bnk>                                              num),
bnk>                                  boost::bind(
bnk>                                              std::greater_equal<int>(),
bnk>                                              boost::bind(
bnk>                                                          &map_type::value_type::second_type::second,
bnk>                                                          boost::bind(
bnk>                                                                      &map_type::value_type::second,
bnk>                                                                      _1)
bnk>                                                          ),
bnk>                                              num)));
bnk>  if (elem != files.end())
bnk>    std::cout << "Found in " + (*elem).first + "\n";
bnk>  return 0;
bnk>}
bnk>

Знаешь поймал себя на мысли, что сделал бы примерно если бы приперло также только через операторы и константы
<Подпись удалена модератором>
Re[4]: Поясню
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 30.07.10 13:59
Оценка: 2 (1) +2
Здравствуйте, 8bit, Вы писали:

ГВ>>Представляешь, как встанут волосы дыбом у собеседователей, если последовать такому совету?

8>Всмысле?

В прямом смысле. По примеру кода (не скажу, что все, но почти все, с кем мне приходилось сталкиваться, да и я сам тоже) пытаются сделать вывод о том, как человек будет писать код в повседневных условиях. Не тогда, когда он специально готовится к показу своей крутизны, а как он будет день за днём лопатить килобайты своего и чужого кода. То есть здесь на самом деле важны не столько продвинутые техники, сколько нюансы вроде std::string, переданных по значению без особой нужды, последовательности в стиле оформления, стиль комментирования, подход к обработке ошибок, прочие подобные характеристики, которые "проходят через весь код". Потому что такие моменты человек вписывает полуавтоматически, чуть ли не на спинномозговых реакциях. Опять таки, могут быть применены и шаблоны, и исключения, и, не побоюсь этого слова, виртуальные деструкторы — но всё должно быть к месту и в меру. Потому, кстати, часто просят пример продуктового кода. Это вовсе не для того, чтобы спереть очередную великую идею гениального велосипеда на тэтраидальных колёсах, а чтобы посмотреть на вот те самые нюансы. Понятно, что код примера будет несколько подчищен, но я тебе ручаюсь — всех нюансов без специальной подготовки (которая равна, по сути, повышению квалификации) всё равно не вычистить.

Вот теперь представь, что в такой контекст ты закидываешь для анализа что-то вроде упражнения по книге Александреску, или сборник приёмов по главам из ARM.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[6]: Ещё
От: vpchelko  
Дата: 30.07.10 14:11
Оценка:
Здравствуйте, Roman Odaisky, Вы писали:

RO>Здравствуйте, Northaunt, Вы писали:


N>>Кстати, глюки со смещением, не моих рук дело, в окне Visual Studio все ровно. Это при отправке сообщения строчки начинает косить


RO>Твоих. Ты явно выравниваешь колонки табуляциями, чего делать нельзя (расползется при другом размере табуляции).


RO>Табуляции допустимы только для отступов, и то спорно (я вот использую пробелы вообще везде).


Ложь, tab/spaces зависит от code-style принятого в проекте.
Сало Украине, Героям Сала
Re[5]: Поясню
От: 8bit  
Дата: 30.07.10 14:12
Оценка:
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>Вот теперь представь, что в такой контекст ты закидываешь для анализа что-то вроде упражнения по книге Александреску, или сборник приёмов по главам из ARM.


вон оно что, понятно Ну так он же начинающий программист. Тут надо смотреть умеет ли он этим С++ вообще пользоваться.
А нюансы и тут видны будут.
Re[6]: Поясню
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 30.07.10 14:14
Оценка:
Здравствуйте, 8bit, Вы писали:

ГВ>>Вот теперь представь, что в такой контекст ты закидываешь для анализа что-то вроде упражнения по книге Александреску, или сборник приёмов по главам из ARM.


8>вон оно что, понятно Ну так он же начинающий программист. Тут надо смотреть умеет ли он этим С++ вообще пользоваться.

8>А нюансы и тут видны будут.

Угу, о чём и идёт речь с самого начала. Немного в иносказательном стиле, но тем не менее.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[5]: Демонстрационный код
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 30.07.10 14:18
Оценка:
Здравствуйте, bnk, Вы писали:

bnk>Блэкджек и шлюхи отдыхают


Мда... Православный буст головного мозга в полный рост.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[7]: Поясню
От: 8bit  
Дата: 30.07.10 14:34
Оценка:
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>Угу, о чём и идёт речь с самого начала. Немного в иносказательном стиле, но тем не менее.


Так я и говорю, пусть напишет код как он знает С++, без перегибов конечно, и по нему и нюансы и знание С++ будет видно.
А сейчас у него три страницы DX кода и плюсов там совсем не видно.
Re[8]: Поясню
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 30.07.10 14:59
Оценка:
Здравствуйте, 8bit, Вы писали:

ГВ>>Угу, о чём и идёт речь с самого начала. Немного в иносказательном стиле, но тем не менее.


8>Так я и говорю, пусть напишет код как он знает С++, без перегибов конечно, и по нему и нюансы и знание С++ будет видно.

8>А сейчас у него три страницы DX кода и плюсов там совсем не видно.

Не-не-не, ты не понял. Смотрят в примере не столько на знание C++ (это можно определить собеседованием), сколько на то, правильно ли он используется в разных закоулках. Вопросы вида: "А знает ли автор об XXXXX?" — это уже вторая производная от суммы наблюдений. Ну и ещё играет роль общая культура программирования, которая от языка не зависит. Это может быть даже DX-код, нет проблем. C++ — объёмный язык, а задачи, которые решает данный кандидат вполне могут не требовать применения каких-то аспектов самого C++ (к примеру — volatile-модификаторы нужны очень не всегда, да и виртуальные деструкторы, не к ночи будь помянуты, тоже).

Так что, код тописктартера, ИМХО, вполне подходит для демо-кода, разве что длинноват, имело бы смысл выбрать что-то покороче. Но справедливости ради, в конечном итоге ТС так и поступил.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[7]: Ещё
От: Roman Odaisky Украина  
Дата: 31.07.10 18:28
Оценка: +1
Здравствуйте, vpchelko, Вы писали:

N>>>Кстати, глюки со смещением, не моих рук дело, в окне Visual Studio все ровно. Это при отправке сообщения строчки начинает косить

RO>>Твоих. Ты явно выравниваешь колонки табуляциями, чего делать нельзя (расползется при другом размере табуляции).
RO>>Табуляции допустимы только для отступов, и то спорно (я вот использую пробелы вообще везде).

V>Ложь, tab/spaces зависит от code-style принятого в проекте.


Табуляции не в начале строки неприемлемы ни при каких условиях. Единственное преимущество табуляций — возможность настроить их размер — в этом случае сводится на нет.
До последнего не верил в пирамиду Лебедева.
Re: Демонстрационный код
От: Cyberax Марс  
Дата: 31.07.10 18:43
Оценка:
Здравствуйте, Northaunt, Вы писали:

N>Fluid.h

N>
N>//-------------------------------------------------------------------------
N>//    Fluid class Destructor
N>//-------------------------------------------------------------------------
N>Fluid3D::~Fluid3D()
N>{
N>    //Free all Textures
N>    GameApp::Release<IDirect3DTexture9*>(Velocity);
N>    GameApp::Release<IDirect3DTexture9*>(Pressure);
N>    GameApp::Release<IDirect3DTexture9*>(Density);
N>    GameApp::Release<IDirect3DTexture9*>(ZLookup);
N>    GameApp::Release<IDirect3DTexture9*>(Divergence);
N>    GameApp::Release<IDirect3DTexture9*>(TemporaryRenderTarget);
N>    GameApp::Release<IDirect3DSurface9*>(BackBuffer);
N>    GameApp::Release<IDirect3DSurface9*>(RenderSurface);

N>    //Free all Vertex Buffers
N>    GameApp::Release<IDirect3DVertexBuffer9*>(QuadVB);
N>    GameApp::Release<IDirect3DVertexBuffer9*>(QuadsArrayVB);
N>    GameApp::Release<IDirect3DVertexBuffer9*>(BorderLinesVB);

N>    //Free all Effects
N>    GameApp::Release<ID3DXEffect*>(FluidEffect);
N>}
N>

Стоит использовать деструкторы и умные указатели, а не лепить явные Release.
Sapienti sat!
Re[2]: Демонстрационный код
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 31.07.10 19:20
Оценка: -1
Здравствуйте, Cyberax, Вы писали:

C>Стоит использовать деструкторы и умные указатели, а не лепить явные Release.


Кстати, это не всегда так. Был у меня случай, когда исключения летели как раз из Release, а в последовательности деструкторов умных указателей копаться — ой, неудобно.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[8]: Поясню
От: Олег К.  
Дата: 07.08.10 04:48
Оценка:
8>Так я и говорю, пусть напишет код как он знает С++, без перегибов конечно, и по нему и нюансы и знание С++ будет видно.
8>А сейчас у него три страницы DX кода и плюсов там совсем не видно.
Плюсов там ровно столько сколько нужно в реальном проекте и это топикстартеру только в плюс. Смарт пойнтеры только еще желательно было бы использовать.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.