nixp.ru v3.0

20 октября 2017,
пятница,
15:45:10 MSK

DevOps с компанией «Флант»
sandy написал 5 июня 2007 года в 13:35 (433 просмотра) Ведет себя как мужчина; открыл 10 тем в форуме, оставил 54 комментария на сайте.

Имеется класс-родитель с инкапсулированным членом типа Т

class A {

protected:

T t;

};

В классе-потомке есть статическая функция, которой нужно получить доступ к члену родителя

class B: public A

{

char* (*p)();

public:

static char* f()

{

return t.member();

}

};

Статической функцию пришлось сделать, так как на нее будет указывать p

Доступа к t из статической функции получить нельзя.

Как быть?

Heavy

Может убрать из базового класса страшное слово «protected»?

sandy

Дело не в защищенности члена. Дело в том, что функция статическая

sandy

Так решил проблемку:

class A {

protected:

T t;

};

class B: public A

{

char* (*p)(T&);

public:

static char* f(T& t)

{

return t.member();

}

};

Не знаю, насколько это элегантно, может кто выскажется

aeuo
sandy
Статической функцию пришлось сделать, так как на нее будет указывать p

Доступа к t из статической функции получить нельзя.

Вы имели в виду, что нельзя сделать указатель на не статическую функцию?

char*(A::* p)();

sandy
Не знаю, насколько это элегантно, может кто выскажется

Сложно высказаться не зная архитектуры программы, её логики: что, как, зачем, почему.

Code Monkey

Ты точно уверен в необходимости делать функцию f статической?

Просто в таком раскладе ты хочешь странного… получить из статической функции значение поля еще не инстанцированного класса.

myst

Не мешайте. Пусть делает как нравится. Чем быстрее получит граблями по лбу, тем быстрее научится.

sandy

Спасибо, конечно, за ответы. Но, вы на дату смотрите?

У меня там вроде была std::map указателей на статические функции

Статическими я их объявил только по причине улучшения производительности

myst

А хто сказал, что статические производительнее?

Code Monkey

гм… бывает иногда мертвые восстают из пепла :)