Сообщение от 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* указатель отображает единицу для всех трёх функций (или только у меня?
).