Показать сообщение отдельно
Старый 15.05.2014, 18:22   #4
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,935 пользователей)
Ответ: Указатели на функции.

Сообщение от HolyDel Посмотреть сообщение
в новом движке использую такой подход для вызова метода куллинга.
хотя есть мнение что кейс все равно будет быстрее.
надо потестить
имхо, в зависимости от деталей реализации case может убавить портабельности коду, раздувшись во всех местах "разыменования". С другой стороны, он выглядит более безопасным для программиста, и очевидным для статического анализатора.
Вот ещё занятная вещица:
#include <iostream>

using namespace std;

class Object{
    private:
        static unsigned short counter;
        unsigned short ID;
    public:
        Object();
        void Show(char s)const;
        void Show2(char s)const;
        void Show3(char t[])const;
};

unsigned short Object::counter=0;

Object::Object(){
    this->counter++;
    this->ID=counter;
}

void Object::Show(char s)const{
    cout<<'['<<this->ID<<"]: "<<s<<endl;
}

void Object::Show2(char s)const{
    cout<<'{'<<this->ID<<"}: "<<s<<endl;
}

void Object::Show3(char t[])const{
    cout<<'<'<<this->ID<<">: "<<t<<endl;
}

int main()
{
    void (Object::*FuncPtr)(char s)const = &Object::Show;
    void (Object::*FuncPtr2)(char s)const = &Object::Show2;
    void (Object::*FuncPtr3)(char t[])const = &Object::Show3;

    Object x1;

    (x1.*FuncPtr)('a');
    (x1.*FuncPtr2)('z');
    (x1.*FuncPtr3)("xx");

    cout<<"addr "<<FuncPtr<<endl;
    cout<<"addr "<<FuncPtr2<<endl;
    cout<<"addr "<<FuncPtr3<<endl;

    cout<<"addr "<<(void*)FuncPtr<<endl;
    cout<<"addr "<<(void*)FuncPtr2<<endl;
    cout<<"addr "<<(void*)FuncPtr3<<endl;

    return 0;
}

Без (да-да, я знаю, так делать не надо) приведения к типу void* указатель отображает единицу для всех трёх функций (или только у меня? ).
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием