Вызов динамического элемента из статической фукции
От: Zibir Чехия www.tigru.org
Дата: 26.06.08 13:58
Оценка:
Как наиболее красиво (эффективно, правильно) вызвать из статического метода класса динамический метод этого же класса?
Re: Вызов динамического элемента из статической фукции
От: Bell Россия  
Дата: 26.06.08 14:01
Оценка:
Здравствуйте, Zibir, Вы писали:

Z>Как наиболее красиво (эффективно, правильно) вызвать из статического метода класса динамический метод этого же класса?


А что такое "динамический метод"?
Любите книгу — источник знаний (с) М.Горький
Re[2]: Вызов динамического элемента из статической фукции
От: Zibir Чехия www.tigru.org
Дата: 26.06.08 14:03
Оценка:
Здравствуйте, Bell, Вы писали:

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


Z>>Как наиболее красиво (эффективно, правильно) вызвать из статического метода класса динамический метод этого же класса?


B>А что такое "динамический метод"?


Это типа обратное от статического
Re: Вызов динамического элемента из статической фукции
От: Were  
Дата: 26.06.08 14:04
Оценка:
Здравствуйте, Zibir, Вы писали:

Z>Как наиболее красиво (эффективно, правильно) вызвать из статического метода класса динамический метод этого же класса?


Я так понимаю класс не синглтон )

Тогда так:

class Beauty
{
public:
    // ...
    void Method();

    static void Static( Beauty * pThis )
    {
        pThis->Method();
    }
};


Re[2]: Вызов динамического элемента из статической фукции
От: Zibir Чехия www.tigru.org
Дата: 26.06.08 14:06
Оценка:
Здравствуйте, Were, Вы писали:

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


Z>>Как наиболее красиво (эффективно, правильно) вызвать из статического метода класса динамический метод этого же класса?


W>Я так понимаю класс не синглтон )


W>Тогда так:


W>
W>class Beauty
W>{
W>public:
W>    // ...
W>    void Method();

W>    static void Static( Beauty * pThis )
W>    {
W>        pThis->Method();
W>    }
W>};
W>


W>


Я тоже про это думал, точнее говоря это единственное, что я придумал. Но мне показалось что это как-то не слишком элегантно
Re[3]: Вызов динамического элемента из статической фукции
От: Bell Россия  
Дата: 26.06.08 14:07
Оценка:
Здравствуйте, Zibir, Вы писали:

B>>А что такое "динамический метод"?

Z>Это типа обратное от статического

ИМХО задача смахивает на бред
Вырази проблему яснее.
Любите книгу — источник знаний (с) М.Горький
Re: Вызов динамического элемента из статической фукции
От: Анатолий Широков СССР  
Дата: 26.06.08 14:07
Оценка:
Здравствуйте, Zibir, Вы писали:

Z>Как наиболее красиво (эффективно, правильно) вызвать из статического метода класса динамический метод этого же класса?


class foo
{
public:
    void member_function() {}

    static void call_member_function(foo &o)
    {
        o.member_function();   
    }
};


зы: Только будьте точны в терминологии, есть просто функция член (non-static member function) и есть статическая функция член (static member function) класса.
Re[2]: Вызов динамического элемента из статической фукции
От: Zibir Чехия www.tigru.org
Дата: 26.06.08 14:13
Оценка:
Здравствуйте, Анатолий Широков, Вы писали:

АШ>Здравствуйте, Zibir, Вы писали:


Z>>Как наиболее красиво (эффективно, правильно) вызвать из статического метода класса динамический метод этого же класса?


АШ>
АШ>class foo
АШ>{
АШ>public:
АШ>    void member_function() {}

АШ>    static void call_member_function(foo &o)
АШ>    {
АШ>        o.member_function();   
АШ>    }
АШ>};
АШ>


АШ>зы: Только будьте точны в терминологии, есть просто функция член (non-static member function) и есть статическая функция член (static member function) класса.


Договорились. Сравнил 2 варианта которые написали Вы и Were. Разница получается в передачи параметра, Вы передаёте адрес, а Were ссылку. Что лучше?
Re[3]: Вызов динамического элемента из статической фукции
От: Анатолий Широков СССР  
Дата: 26.06.08 14:17
Оценка:
Z>Договорились. Сравнил 2 варианта которые написали Вы и Were. Разница получается в передачи параметра, Вы передаёте адрес, а Were ссылку. Что лучше?

Да, в принципе, по эффективности разницы нет, только при передаче по ссылке нет нужны проверять валидность адреса объекта, как в случае с указателем.
Re[3]: Вызов динамического элемента из статической фукции
От: Were  
Дата: 26.06.08 14:22
Оценка:
Здравствуйте, Zibir, Вы писали:

Z>Здравствуйте, Анатолий Широков, Вы писали:


Z>Договорились. Сравнил 2 варианта которые написали Вы и Were. Разница получается в передачи параметра, Вы передаёте адрес, а Were ссылку. Что лучше?


Только наоборот, я адрес, а он ссылку )
Re[3]: Вызов динамического элемента из статической фукции
От: Mr.Cat  
Дата: 26.06.08 14:45
Оценка:
Здравствуйте, Zibir, Вы писали:
Z>Договорились. Сравнил 2 варианта которые написали Вы и Were. Разница получается в передачи параметра, Вы передаёте адрес, а Were ссылку. Что лучше?

Оба варианта — глупость. Лучше метод-член. Т.к. статический метод, принимающий ссылку или указатель на объект своего класса — это кривая эмуляция метода-члена.
Re[4]: Вызов динамического элемента из статической фукции
От: Vamp Россия  
Дата: 26.06.08 14:53
Оценка: +1
B>ИМХО задача смахивает на бред
Мне почему-то кажется, речь идет о классической задачи передачи члена класса в качестве коллбек-функции.
Да здравствует мыло душистое и веревка пушистая.
Re[4]: Вызов динамического элемента из статической фукции
От: Анатолий Широков СССР  
Дата: 26.06.08 20:32
Оценка: +1
Здравствуйте, Mr.Cat, Вы писали:

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

Z>>Договорились. Сравнил 2 варианта которые написали Вы и Were. Разница получается в передачи параметра, Вы передаёте адрес, а Were ссылку. Что лучше?

MC>Оба варианта — глупость. Лучше метод-член. Т.к. статический метод, принимающий ссылку или указатель на объект своего класса — это кривая эмуляция метода-члена.


Только глупость не надо говорить. Передайте в функцию создания потока нестатическую функцию член. И обработайте оконное сообщение нестатической функцией членом.
Re[5]: Вызов динамического элемента из статической фукции
От: Mr.Cat  
Дата: 26.06.08 23:05
Оценка:
Здравствуйте, Анатолий Широков, Вы писали:

АШ>Только глупость не надо говорить. Передайте в функцию создания потока нестатическую функцию член. И обработайте оконное сообщение нестатической функцией членом.


Тогда задавайте вопрос применительно к потокам (кстати, boost::thread вполне нормально создает потоки для членов), оконным сообщениям (тут, кстати, предлагаю подглядеть, как это сделано в каких-нить wxWidgrts и сделать так же) и прочим колбекам. А то сферический член в вакууме получается.
Re: Вызов динамического элемента из статической фукции
От: Аноним  
Дата: 27.06.08 10:52
Оценка:
Здравствуйте, Zibir, Вы писали:

Z>Как наиболее красиво (эффективно, правильно) вызвать из статического метода класса динамический метод этого же класса?


статический метод, так или иначе, но должен получить this класса, у которого нужно вызвать паблик метод. вопрос в том, как этот this передать туда покрасившее.
к примеру, в виндах (да и не только в их), в hwnd окне есть возможность хранить юзеровские данные (SetWindowLong(hwnd, DWL_USER, (LONG)this)). так как окно — это объект ядра (фактически, глобальная переменная), то ее можно получить в любом месте программы, и вытащить из нее пользовательские данные (GetWindowLong). имея адрес объекта (this), статическая функция может вызывать его паблик методы.
иначе, увы, никак.
Re[5]: Вызов динамического элемента из статической фукции
От: Roman Odaisky Украина  
Дата: 27.06.08 16:31
Оценка: :)
Здравствуйте, Анатолий Широков, Вы писали:

АШ>Только глупость не надо говорить.

Не надо.

АШ>Передайте в функцию создания потока нестатическую функцию член.


thread t(bind(&T::f, instance, other, parameters));


АШ>И обработайте оконное сообщение нестатической функцией членом.


void MyClass::onAccepted()
{
}

connect(this, SIGNAL(accepted()), this, SLOT(onAccepted()));
До последнего не верил в пирамиду Лебедева.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.