XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > Общение> Hard & Soft
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

Ответ
 
Faion
Noblesse Oblige
offline
Опыт: 30,395
Активность:
В общем так. Спп имба язык, на нем можно что угодно и является единственным языком математически полным. Но разработка на спп ощутимо медленнее чем на том же C#. Сам по себе язык сложнее и вообще позволяет даже себе выстрелить не только в ногу, но и в голову. По этому чайникам не рекомендую. Перед раскуриванием плюсов лучше сначала стать уверенным юзером любого другого ООП языка(написать хотя бы пару коммерческих проектов)
PS: а это для самопроверки людей, которые считают что они отцы плюсов=)
» сампл
template
<
    typename T,
    template <typename> class OwnershipPolicy = ref_counted,
    template <typename> class ConversionPolicy = disallow_conversion,
    template <typename> class CheckingPolicy = assert_check,
    template <typename> class StoragePolicy = scalar_storage
>
 class smart_ptr
    : public optimally_inherit<
        typename optimally_inherit<
            StoragePolicy<T>,
            OwnershipPolicy<T>
            >::type,
        typename optimally_inherit<
            CheckingPolicy<T>,
            ConversionPolicy<T>
            >::type
        >::type
    {
        ...
    };
Старый 20.05.2012, 15:13
ScorpioT1000
Работаем
offline
Опыт: отключен
Буст? Не разбирался в нём =) ну офк твои школьные понты изначально неверно построены - тут скорее отцы буста, а не отцы плюсов.
Старый 20.05.2012, 17:06
Faion
Noblesse Oblige
offline
Опыт: 30,395
Активность:
ScorpioT1000:
Буст?
Нуб детектед.
Старый 20.05.2012, 17:10
ScorpioT1000
Работаем
offline
Опыт: отключен
Так просвяти нас.
Старый 20.05.2012, 18:06
Mihahail
๏̯͡๏
offline
Опыт: 17,766
Активность:
Faion, алгоритмы всем мозг сильнее овнят, чем технические детали.
Старый 20.05.2012, 19:17
Faion
Noblesse Oblige
offline
Опыт: 30,395
Активность:
ScorpioT1000:
Так просвяти нас.
гугли: андрей александреску и рид.
Mihahail:
Faion, алгоритмы всем мозг сильнее овнят, чем технические детали.
C++ позволяет создать самые нечитабельные алгоритмы(при этом правильные офк). В том числе за счет того что приведено выше.
Вообще используя подход к написанию кода, как в примере выше понимать код будет только его автор:)
Кстати на тему алгоритмизации(ну и бустов), опять же пример сам по себе простой, но при этом достаточно извращенский=)
» тык
#include <boost/signal.hpp>
#include <boost/bind.hpp>
#include <iostream>

using namespace boost;
using namespace std;

struct ClassA
{
    signal<void ()>    SigA;
    signal<void (int)> SigB;
};

struct ClassB
{
    void PrintFoo()      { cout << "Foo" << endl; }
    void PrintInt(int i) { cout << "Bar: " << i << endl; }
};

int main()
{
    ClassA a;
    ClassB b, b2;

    a.SigA.connect(bind(&ClassB::PrintFoo, &b));
    a.SigB.connect(bind(&ClassB::PrintInt, &b,  _1));
    a.SigB.connect(bind(&ClassB::PrintInt, &b2, _1));

    a.SigA();
    a.SigB(4);
}
Старый 20.05.2012, 19:32
ScorpioT1000
Работаем
offline
Опыт: отключен
Вообще используя подход к написанию кода, как в примере выше понимать код будет только его автор:)
да нет, там вроде все очевидно, только не совсем ясно зачем ты его привел, я думал, там скрыт какойто хитрый смысл
ScorpioT1000 добавил:
Jonny, 20.05.2012 18:04:51:
можно было сделать проще, сделать класс со всеми методами которые расширяются политиками (пыстыми), а потом делать свои классы которые расширяют один или несколько методов из этих классов, потом сделать убер класс который наследует их всех, и так чтобы первый в наследовании был класс с пустыми методами, и этот уберл уласс уже использовать при работе
Jonny, 18:06:03:
тогда не надо было бы разделять праметры на разные политики и сделать template
<
typename T,
template <typename> class Policy1 = NonePolicy,
template <typename> class Policy2 = NonePolicy,
template <typename> class Policy3 = NonePolicy,
template <typename> class Policy4 = Policy
>
class smart_ptr
ScorpioT1000 добавил:
гугли: андрей александреску и рид.
похоже у тебя бивни, ясно =) гг
Старый 20.05.2012, 19:39
Faion
Noblesse Oblige
offline
Опыт: 30,395
Активность:
ScorpioT1000:
да нет, там вроде все очевидно, только не совсем ясно зачем ты его привел, я думал, там скрыт какойто хитрый смысл
Что там очевидно? Может быть ты оракул, и знаешь устройство темплейтов которые использованы? Лично я обычный смертный и не знаю. А как следствие что бы вообще понять что происходит, я должен буду сначала покурить темплейты.
ScorpioT1000:
можно было сделать проще
Я ничего не имею против Джона, но не стоит считать одного из лучших программистов С++ ламером=) вы бы еще Джобса поучили айфоны делать
ScorpioT1000:
похоже у тебя бивни, ясно =) гг
Не надоело селфовнится?=)
Старый 20.05.2012, 19:54
Mihahail
๏̯͡๏
offline
Опыт: 17,766
Активность:
Faion, я это сказал к тому, чтобы ты не выкладывал дурацких самплов, которым в плане алгоритмов грош цена.
Старый 20.05.2012, 20:02
Faion
Noblesse Oblige
offline
Опыт: 30,395
Активность:
Mihahail, о великий гуру, тогда просвети меня, смертного о том, что происходит в сампле:
Старый 20.05.2012, 20:10
ScorpioT1000
Работаем
offline
Опыт: отключен
Что там очевидно? Может быть ты оракул, и знаешь устройство темплейтов которые использованы?
Вызвало затруднение только optimally_inherit, ну я с бустом не работал, но вот щас погуглил - раньше, в 2002 году, в некоторых компиляторах не было множественного наследования (MI), он заменял его.
Остальное очевидно же - задаем нужные политики поведения для каждого конкретного инстанса.
Старый 20.05.2012, 20:25
Faion
Noblesse Oblige
offline
Опыт: 30,395
Активность:
ScorpioT1000:
Остальное очевидно же - задаем нужные политики поведения для каждого конкретного инстанса.
Это только очевидно если ты знаешь что из себя представляет каждый из объектов, которые ты используешь.
Взять даже тот же
» ref_counted
ref_counted::ref_counted() {
pCount_ = static_cast<unsigned int*>(
SmallObject<>::operator new(sizeof(unsigned int)));
assert(pCount_);
*pCount_ = 1;
}
bool ref_counted::release(const P&) {
if (!--*pCount_) {
SmallObject<>::operator delete(pCount_, sizeof(unsigned int));
return true;
}
return false;
}
class smart_ptr
: public storage_policy<T>
, public ownership_policy<typename storage_policy<T>::PointerType>
, public checking_policy<typename storage_policy<T>::stored_type>
, public conversion_policy
{ ... };
smart_ptr::smart_ptr(const stored_type& p) : SP(p)
{ KP::OnInit(GetImpl(*this)); }
smart_ptr::~smart_ptr() {
if (OP::release(GetImpl(*static_cast<SP*>(this)))) {
SP::Destroy();
}
}
Ну ты понял в общем.
Старый 20.05.2012, 20:42
ScorpioT1000
Работаем
offline
Опыт: отключен
Я знаю, какова задача каждого из объектов.
Старый 20.05.2012, 20:45
Mihahail
๏̯͡๏
offline
Опыт: 17,766
Активность:
Faion, а если я скажу что не знаю бустов, ты скажешь что я нуб?
Старый 20.05.2012, 23:03
ScorpioT1000
Работаем
offline
Опыт: отключен
if (!--*pCount_) {
кстати, это говнокод =) пишется
if (--*pCount_ == 0) {
оптимизатор сам исправит, а код понятнее
Старый 20.05.2012, 23:11
Faion
Noblesse Oblige
offline
Опыт: 30,395
Активность:
Mihahail:
Faion, а если я скажу что не знаю бустов, ты скажешь что я нуб?
Нет, не скажу. Т.к. далеко не все нубы столь глупы, что бы критиковать вещи которые не понимают.
ScorpioT1000:
это говнокод
ScorpioT1000:
оптимизатор сам исправит
Сам себе противоречишь =) И да асм код обоих примеров для сравнения в студию. Да и вообще, это лишь стиль оформления.
Старый 20.05.2012, 23:18
Mihahail
๏̯͡๏
offline
Опыт: 17,766
Активность:
Faion, я не критикую, лишь говорю, что хардкорные алгоритмы труднее для восприятия чем любые технические "фичи".
Я никогда фичи не критиковал.
Старый 20.05.2012, 23:23
Faion
Noblesse Oblige
offline
Опыт: 30,395
Активность:
Mihahail:
хардкорные алгоритмы труднее для восприятия
Подобные алгоритмы пишут только говнокодеры. А код тру программистов всегда читается без особых проблем при >= техническом уровне.
Старый 20.05.2012, 23:35
ScorpioT1000
Работаем
offline
Опыт: отключен
И да асм код обоих примеров для сравнения в студию.
  1. они будут одинаковы из-за оптимизатора
  2. под понятие говнокод в том числе подпадает нечитаемый код
Старый 20.05.2012, 23:37
Faion
Noblesse Oblige
offline
Опыт: 30,395
Активность:
ScorpioT1000:
под понятие говнокод в том числе подпадает нечитаемый код
Для меня код в стиле
if(...) {
}
является нечитабельным. Следует что подобный код - говнокод?
Старый 20.05.2012, 23:42
Ответ

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы можете скачивать файлы

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 02:15.