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]: Вызов динамического элемента из статической фукции
От: 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()));
До последнего не верил в пирамиду Лебедева.
Вызов динамического элемента из статической фукции
От: 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[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), статическая функция может вызывать его паблик методы.
иначе, увы, никак.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.