|
Тема |
Re: я като си зачекал темата [re: zaphod] |
|
Автор |
void* (психопат) |
|
Публикувано | 23.05.05 20:32 |
|
|
абе не знам точно какво се опитваш да направиш, но ако C++ те спъва чак толкова най-вероятно си сбъркал нещо още в дизайна.
имай предвид, че указателят към член не е прост указател в общия случай. т.е. не е адрес в паметта, с който да работи процесорът, а някаква структура. затова кастовете с какива типове са ограничени. също както не можеш да кастнеш някакъв обект към int например.
A a;
int i = reinterpret_cast<int>(a); // грешка
за този клас например
class A
{
public:
int func1(int, char*) { return 0; }
void func2(float) { return; }
static int func3() { return 42; }
double d;
};
този код
std::cout << sizeof( int (A::*)(int, char*) ) << std::endl;
std::cout << sizeof( double A::* ) << std::endl;
std::cout << sizeof( char* ) << std::endl;
отпечатва това:
8
4
4
в g++.
в т. 5.2.10 на Стандарта пише:
9 An rvalue of type ``pointer to member of X of type T1'' can be explicitly converted to an rvalue of type ``pointer to member of Y of type T2'' if T1 and T2 are both function types or both object types.66) The null member pointer value (4.11) is converted to the null member pointer value of the destination type. The result of this conversion is unspecified, except in the following cases:
- converting an rvalue of type ``pointer to member function'' to a different pointer to member function type and back to its original type yields the original pointer to member value.
- converting an rvalue of type ``pointer to data member of X of type T1'' to the type ``pointer to data mem ber of Y of type T2'' (where the alignment requirements of T2 are no stricter than those of T1) and back to its original type yields the original pointer to member value.
т.е. ако просто искаш да можеш да пазиш адресите и после сам да си ги кастваш към правилния тип, можеш да направиш нещо такова:
class dummy_class
{
public:
void dummy_func() {}
};
typedef void (dummy_class::*member_pointer_t)();
после някъде можеш да направиш
member_pointer_t qq;
qq = reinterpret_cast<member_pointer_t>(&A::func1);
запазваш си някъде qq, и по някое време като ти потрябва го кастваш обратно към правилния тип
нещо_си = reinterpret_cast<int (A::*)(int, char*)>(saved_qq);
ако можеш дай по-конкретен пример за това, което искаш да направиш и ще видя дали ще се сетя нещо.
unsigned
|
| |
я пробвайте да компилирате това:
| zaphod
| 20.05.05 12:04 |
Я пак, че не разбрах нещо
| Colombino
| 20.05.05 13:11 |
Re: Я пак, че не разбрах нещо
| Pekoнcтpykтop
| 20.05.05 15:42 |
Не точно
| Colombino
| 20.05.05 16:01 |
Re: Не точно
| Dorian_Gray
| 20.05.05 16:49 |
Именно, де
| Colombino
| 20.05.05 17:00 |
"членове с деструктори"-ебааа!!!
| focusnik
| 20.05.05 17:27 |
Re: Я пак, че не разбрах нещо
| void*
| 20.05.05 17:15 |
Другари!
| BjarneStroustrup®
| 21.05.05 10:07 |
Re: Другари!
| Colombino
| 21.05.05 12:26 |
Re: Другари!
| BjarneStroustrup®
| 21.05.05 12:48 |
Re: Другари!
| Colombino
| 21.05.05 13:15 |
Re: Другари!
| void*
| 22.05.05 02:05 |
Тва на мен ли го казваш?!?
| Colombino
| 22.05.05 14:39 |
Re: Тва на мен ли го казваш?!?
| void*
| 22.05.05 20:07 |
Re: Тва на мен ли го казваш?!?
| BjarneStroustrup®
| 25.05.05 12:32 |
Не вярвам
| Colombino
| 25.05.05 15:45 |
Re: Не вярвам
| BjarneStroustrup®
| 25.05.05 16:35 |
Re: Тва на мен ли го казваш?!?
| void*
| 25.05.05 16:24 |
Re: Тва на мен ли го казваш?!?
| BjarneStroustrup®
| 25.05.05 16:37 |
Re: Другари!
| xyz
| 21.05.05 16:46 |
Re: Другари!
| Colombino
| 21.05.05 20:12 |
Re: Другари!
| zaphod
| 21.05.05 20:40 |
Re: Другари!
| Colombino
| 21.05.05 21:00 |
Re: Другари!
| xyz
| 21.05.05 21:39 |
Re: Другари!
| zaphod
| 21.05.05 23:30 |
Re: Другари!
| xyz
| 22.05.05 01:33 |
Re: Другари!
| zaphod
| 22.05.05 09:02 |
Re: Другари!
| xyz
| 22.05.05 23:20 |
Бъди джигит!
| Colombino
| 22.05.05 23:40 |
Re: Бъди джигит!
| xyz
| 23.05.05 13:14 |
бе това на къв компилатор
| zaphod
| 23.05.05 14:35 |
Re: бе това на къв компилатор
| Colombino
| 23.05.05 14:55 |
оправих го
| zaphod
| 23.05.05 15:03 |
я като си зачекал темата
| zaphod
| 23.05.05 13:37 |
Баси извратения синтаксис!
| Colombino
| 23.05.05 16:20 |
Re: Баси извратения синтаксис!
| zaphod
| 23.05.05 17:49 |
Re: я като си зачекал темата
| void*
| 23.05.05 20:32 |
Re: я като си зачекал темата
| zaphod
| 23.05.05 21:48 |
IDispatch
| ~!@$%amp;^*()_+
| 23.05.05 22:54 |
Re: IDispatch
| zaphod
| 24.05.05 08:33 |
Re: IDispatch
| ~!@$%amp;^*()_+
| 24.05.05 10:02 |
Re: я като си зачекал темата
| void*
| 24.05.05 03:27 |
Re: я като си зачекал темата
| zaphod
| 24.05.05 08:22 |
Re: я като си зачекал темата
| void*
| 24.05.05 14:06 |
тоя метод за викане на конструктор
| zaphod
| 23.05.05 14:26 |
Не бачка?!?
| Colombino
| 23.05.05 14:33 |
Re: Не бачка?!?
| zaphod
| 23.05.05 14:53 |
ами очаквах
| zaphod
| 20.05.05 16:18 |
Я пак помисли
| Colombino
| 20.05.05 16:48 |
Re: ами очаквах
| void*
| 20.05.05 17:19 |
Re: ами очаквах
| Colombino
| 20.05.05 17:25 |
Re: ами очаквах
| void*
| 20.05.05 18:14 |
Re: ами очаквах
| Colombino
| 20.05.05 18:23 |
Re: ами очаквах
| void*
| 20.05.05 18:29 |
Ми не знам
| Colombino
| 20.05.05 18:37 |
Re: Ми не знам
| focusnik
| 20.05.05 18:43 |
Re: Ми не знам
| void*
| 20.05.05 19:11 |
Не съм съгласен, мистерията остава
| Colombino
| 20.05.05 20:01 |
Re: Не съм съгласен, мистерията остава
| void*
| 20.05.05 20:28 |
ето и окончателния отговор
| void*
| 22.05.05 03:12 |
Re: ето и окончателния отговор
| явepтъ
| 24.05.05 02:31 |
Re: Не съм съгласен, мистерията остава
| zaphod
| 20.05.05 22:35 |
Re: Не съм съгласен, мистерията остава
| void*
| 21.05.05 00:56 |
ц++ има адски много кусури
| ~!@$%amp;^*()_+
| 21.05.05 02:04 |
Re: ц++ има адски много кусури
| void*
| 21.05.05 12:01 |
Re: Не съм съгласен, мистерията остава
| zaphod
| 21.05.05 07:56 |
Re: Не съм съгласен, мистерията остава
| BjarneStroustrup®
| 21.05.05 11:14 |
Подкрепям
| Colombino
| 21.05.05 12:32 |
Re: Подкрепям
| BjarneStroustrup®
| 21.05.05 12:50 |
Re: я пробвайте да компилирате това:
| Чвopko
| 20.05.05 13:38 |
Re: я пробвайте да компилирате това:
| Пeтpocян
| 20.05.05 13:40 |
|
|
|
|