LINUX.ORG.RU

Странное в C++

 


1

4

Есть вот такой класс:

class Foo {
...
public:
    const PData *get_data(int i) const;
...
private:
    PData *get_data(int i);
};

я пытаюсь звать функцию так:

const PData *data = obj->get_data(i);
и оно выбирает всегда вторую функцию и соответственно не компилируется так как private.

А если делаю так:

const Foo *cobj = obj;
const PData *data = cobj->get_data(i);

то всё работает. Но некрасивенько... А можно красивее сделать? Класс Foo трогать нельзя :(

★★★★★

Если я правильно понял, ты хочешь вызвать нестатический метод без создания объекта. Дело не в секции private.

l4gfcm ★★
()

Это так задумано. Сначала находится самая подходящая функция вне зависимости от public/private, а потом уже учитывается доступ к ней.

Ты можешь сделать по-красивее:

template <typename T>
T const * c_ptr(T * p) { return p; }

c_ptr(obj)->get_data(i);
rupert ★★★★★
()
Ответ на: комментарий от l4gfcm

Не объект создан, это я из поста выкинул просто.

slapin ★★★★★
() автор топика

Вот тебе еще идея: public - то интерфейс, private - реализация (т.е. кишки), если интерфейс с кишками не смешивать, то все будет ок.

anonymous
()

Видимо компилятор считает, что раз твой объект obj объявлен без const, то в данном вызове подходит больше private метод.

rumgot ★★★★★
()
Ответ на: комментарий от rumgot

Либа третьих лиц, менять нельзя (ну то есть можно, но это переговоры, убеждения, детали, митинги, и в итоге вряд ли получится, так как упёртые и им пофигу).

slapin ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.