Pimple c++
От: Kingofastellarwar Украина  
Дата: 04.03.12 15:09
Оценка:
недавно тут презентацию смотерл по очередной версии с++ там о пимпле упамянули, помню как-то пробовал, но не перешёл, а как вообще в с++ в народе, часто пимпл используют?
Я изъездил эту страну вдоль и поперек, общался с умнейшими людьми и я могу вам ручаться в том, что обработка данных является лишь причудой, мода на которую продержится не более года. (с) Эксперт, авторитет и профессионал из 1957 г.
Re: Pimple c++
От: okman Беларусь https://searchinform.ru/
Дата: 04.03.12 15:10
Оценка: 1 (1) +2
Здравствуйте, Kingofastellarwar, Вы писали:

K>недавно тут презентацию смотерл по очередной версии с++ там о пимпле упамянули, помню как-то пробовал, но не перешёл, а как вообще в с++ в народе, часто пимпл используют?


Используют, как и все остальное — только там, где реально необходимо.
Re: Pimple c++
От: о_О
Дата: 04.03.12 15:20
Оценка: +1
да
Re: Pimple c++
От: MxMsk Португалия  
Дата: 04.03.12 16:00
Оценка:
Здравствуйте, Kingofastellarwar, Вы писали:

K>недавно тут презентацию смотерл по очередной версии с++ там о пимпле упамянули, помню как-то пробовал, но не перешёл, а как вообще в с++ в народе, часто пимпл используют?

А чего это такое? Можно в двух словах?
Re[2]: Pimple c++
От: WolfHound  
Дата: 04.03.12 16:22
Оценка: 1 (1) -2 :)
Здравствуйте, MxMsk, Вы писали:

MM>А чего это такое? Можно в двух словах?

Это такая страшная хрень...
foo.h
class FooImpl;
class Foo
{
public:
    Foo();
    void Do();
private:
    boost::scoped_ptr<FooImpl> impl_;
};


foo.cpp
#include "foo.h"

class FooImpl
{
public:
    void Do()
    {
    }
};

Foo::Foo()
    : impl_(new FooImpl())
{}

void Foo::Do()
{
    impl_->Do();
}

И все это дело закатывается в dll/so/или что там на целевой платформе.

Теперь мы можем спокойно использовать эту длл.
Если мы захотим добавить в FooImpl новые поля, то размер Foo не изменится, и мы сможем заменить нашу длл без перекомпиляции остального софта.

Короче это героическое решение одной из проблем, которых в нормальных языках нет.
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re: Pimple c++
От: minorlogic Украина  
Дата: 04.03.12 16:26
Оценка: -8
Здравствуйте, Kingofastellarwar, Вы писали:

K>недавно тут презентацию смотерл по очередной версии с++ там о пимпле упамянули, помню как-то пробовал, но не перешёл, а как вообще в с++ в народе, часто пимпл используют?


Только безграмотные програмисты которое не освоили виртуальные функции.
... << RSDN@Home 1.2.0 alpha 5 rev. 1539>>
Ищу работу, 3D, SLAM, computer graphics/vision.
Re[2]: Pimple c++
От: Anpek  
Дата: 04.03.12 17:17
Оценка: +1
Здравствуйте, minorlogic, Вы писали:

M>Только безграмотные програмисты которое не освоили виртуальные функции.


Дааа.. Qt писали неудачники!!!
Re[3]: Pimple c++
От: Anpek  
Дата: 04.03.12 18:01
Оценка:
Здравствуйте, Anpek, Вы писали:

А ты че плюс поставил, это вообще-то сарказм был
Re[2]: Pimple c++
От: о_О
Дата: 04.03.12 18:13
Оценка:
Здравствуйте, minorlogic, Вы писали:

M>Только безграмотные програмисты которое не освоили виртуальные функции.


лол, что?
Re[3]: Pimple c++
От: Mazay Россия  
Дата: 04.03.12 18:21
Оценка: 1 (1)
Здравствуйте, Anpek, Вы писали:

M>>Только безграмотные програмисты которое не освоили виртуальные функции.


A>Дааа.. Qt писали неудачники!!!


Qt особый случай. Они могли так сделать для борьбы с глюками компиляторов или для обратной совместимости.

В целом PIMPL — это костыль. По-хорошему, те проблемы, которые он решает, нужно решать как-то по-другому.
Уродство данного решения становится очевидным, когда у инкапсулируемого объекта оказывается много методов. Приходится ваять много тупого кода.
Главное гармония ...
Re[4]: Pimple c++
От: о_О
Дата: 04.03.12 18:35
Оценка:
Здравствуйте, Mazay, Вы писали:

M>В целом PIMPL — это костыль. По-хорошему, те проблемы, которые он решает, нужно решать как-то по-другому.

M>Уродство данного решения становится очевидным, когда у инкапсулируемого объекта оказывается много методов. Приходится ваять много тупого кода.

и как ещё можно сделать кроссплатформенно?
Re[3]: Pimple c++
От: MikePetrichenko Беларусь www.btframework.com
Дата: 04.03.12 18:55
Оценка:
Здравствуйте, WolfHound, Вы писали:

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


MM>>А чего это такое? Можно в двух словах?

WH>Это такая страшная хрень...

Так это же делегирование, которое в COM существует уже лет так 20 с лишним.
Bluetooth, IrDA, WiFi and Serial Ports SDK for .NET, ActiveX, C++ and VCL
Spektrum Telemetry Log File Viewer
Re: Pimple c++
От: alex_public  
Дата: 05.03.12 00:55
Оценка:
Здравствуйте, Kingofastellarwar, Вы писали:

K>недавно тут презентацию смотерл по очередной версии с++ там о пимпле упамянули, помню как-то пробовал, но не перешёл, а как вообще в с++ в народе, часто пимпл используют?


Удобно для написания кроссплатформенных библиотек интенсивно работающих ОС API. Других полезных применений не припомню. )
Re: Pimple c++
От: Banned by IT  
Дата: 05.03.12 01:38
Оценка: +2
Здравствуйте, Kingofastellarwar, Вы писали:

K>недавно тут презентацию смотерл по очередной версии с++ там о пимпле упамянули, помню как-то пробовал, но не перешёл, а как вообще в с++ в народе, часто пимпл используют?

Строго по необходимости.
Как то надо было чтоб в public headers одной библиотеки не попадало никаких внешних зависимостей, а в некоторых классах в private секции были поля, требующие сторонних библиотек.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[3]: Pimple c++
От: . Великобритания  
Дата: 05.03.12 12:17
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>Это такая страшная хрень...

WH>Короче это героическое решение одной из проблем, которых в нормальных языках нет.
А почему не так?
foo.h
class Foo
{
public:
    virtual void Do()=0;
    virtual ~Foo()=0;// гы-гы, виртуальный® деструктор™.
};
Foo *createFoo();

foo.cpp
class FooImpl : public Foo
{
public:
    void Do()
    {
    }
};
Foo *createFoo()
{
  return new FooImpl();
}

Неужели только ради конструктора? Или такой код компиляторно-зависимый?
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[4]: Pimple c++
От: Sni4ok  
Дата: 05.03.12 13:06
Оценка:
Здравствуйте, ., Вы писали:

.>Неужели только ради конструктора? Или такой код компиляторно-зависимый?


часто динамический полиморфизм- сильно вреден.
Re[5]: Pimple c++
От: vpchelko  
Дата: 05.03.12 13:11
Оценка: -1
Здравствуйте, Sni4ok, Вы писали:

S>часто динамический полиморфизм- сильно вреден.


C++ сам по себе вреден.
Сало Украине, Героям Сала
Re[5]: Pimple c++
От: . Великобритания  
Дата: 05.03.12 13:18
Оценка:
Здравствуйте, Sni4ok, Вы писали:

.>>Неужели только ради конструктора? Или такой код компиляторно-зависимый?

S>часто динамический полиморфизм- сильно вреден.
Чем вреден-то?

Хотя я понял. Не только ради конструктора, но и чтобы можно было наследоваться. Скажем, всем привычный QWidget моим способом не состряпать. Придётся сильно менять дизайн всей системы.
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re: Pimple c++
От: Kingofastellarwar Украина  
Дата: 05.03.12 16:18
Оценка:
я сам не сильно понял нафига такой изврат, потому что на практике интрефейсная часть класса обычно редактируется не на много реже имплементации, а разделение можно сделать через обычные интерфейсы, как я и делаю.

а ускорение компилирования можно достичь и другими методами, по крайней мере я знаю как в 3-4 раза ускорить vc++ просто настроив кое что
Я изъездил эту страну вдоль и поперек, общался с умнейшими людьми и я могу вам ручаться в том, что обработка данных является лишь причудой, мода на которую продержится не более года. (с) Эксперт, авторитет и профессионал из 1957 г.
Re[2]: Pimple c++
От: . Великобритания  
Дата: 05.03.12 16:27
Оценка:
Здравствуйте, Kingofastellarwar, Вы писали:

K>я сам не сильно понял нафига такой изврат, потому что на практике интрефейсная часть класса обычно редактируется не на много реже имплементации, а разделение можно сделать через обычные интерфейсы, как я и делаю.

Это ты зря. Интерфейсная часть в правильных библиотеках обычно не редактируется вообще, либо с соблюдением хотя бы backward compatibility.
А нужно это для наследования. Скажем, как бы ты класс QWidget описал/реализовал?
А вообще, это очередной камень в огород ООП...
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.