Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Адрес метода

3.8K
11 октября 2005 года
VovaL
50 / / 26.09.2005
Вопрос по получению адреса метода.
Ниже простой пример.

class aa {
void b(char*);
void c(void);
};
void aa::b(char *t) {
t="aa";
};
void aa::c() {
void (*f)(char*);
f = b;
};

Ругается на f = b. Почему?
3
11 октября 2005 года
Green
4.8K / / 20.01.2000
Цитата:
Originally posted by VovaL
Ругается на f = b. Почему?


Потому, что указатель на b имеет тип
void (aa::*f)(char*);
а не
void (*f)(char*);

3.8K
11 октября 2005 года
VovaL
50 / / 26.09.2005
И что надо сделать, чтобы и адрес получить и от ошибки избавиться?
3
11 октября 2005 года
Green
4.8K / / 20.01.2000
Цитата:
Originally posted by VovaL
И что надо сделать, чтобы и адрес получить и от ошибки избавиться?


Изменить тип указателя или изменить тип метода (сделать его статическим).

3.8K
11 октября 2005 года
VovaL
50 / / 26.09.2005
Спасибо.
Изменил, ошибки нет, но со static перестраховка.
3.8K
12 октября 2005 года
VovaL
50 / / 26.09.2005
Как я понимаю, из static методов нельзя обращаться к неstatic членам класса.
Насколько легален метод обхода

class a {
static a* tthis;
a::a();
...
};
a:a() { tthis=this};
...

и потом добавлять tthis-> в static методе ко всем членам/методам неstatic?
3
12 октября 2005 года
Green
4.8K / / 20.01.2000
Цитата:
Originally posted by VovaL
Насколько легален метод обхода


Только в том случае, если класс - синглтон, т.е. гарантированно имеет только один экземпляр. Гарантироваться должно соотв. механизмами создания непосредственно в классе, т.е. как минимум иметь закрытый конструктор.

3.8K
12 октября 2005 года
VovaL
50 / / 26.09.2005
Т.е. если он используется под вывеской
virtul publiс, можно спать спокойно?
3
12 октября 2005 года
Green
4.8K / / 20.01.2000
Цитата:
Originally posted by VovaL
Т.е. если он используется под вывеской
virtul publiс, можно спать спокойно?


я не понял... :)

3.8K
13 октября 2005 года
VovaL
50 / / 26.09.2005
Имеется ввиду декларация его в другом/других классах только в виде
...
class b: virtual public a,...{
...
};
когда создается один экземпляр класса.
В общем понятно, что при движении всего и вся в сях приходиться за что-то цепляться, как тут за static. Ограничения эти исскуственные - при желании можно сделать релиз для жизни, а не для вазы.
Ps а как выглядит закрытый конструктор?
3
13 октября 2005 года
Green
4.8K / / 20.01.2000
Цитата:
Originally posted by VovaL
Ps а как выглядит закрытый конструктор?


Просто объявленный как private

 
Код:
class A
{
private
  A();
};


Что-то у меня складывается впечатление, что ты не той дорогой идешь.
Мне не совсем понятно, зачем хранить указатель на свой (для класса) метод?

Опиши проблему на более высоком уровне, должно быть более элегантное решение.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог