powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / выведение константности шаблонного метода
10 сообщений из 10, страница 1 из 1
выведение константности шаблонного метода
    #39065244
alexy_black
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я чего-то найти никакой нифы не могу. раньше не вталкивался с такой задачей.
у менять есть такая переменная в private
Код: sql
1.
2.
3.
typedef boost::ptr_set<rule> rule_store_t;
typedef std::map<std::string, rule_store_t> overrule_t;
overrule_t overruled_;


и есть такой метода для того, чтобы установить итератор на нужно правило
Код: sql
1.
template<class CI, class RI> bool search_inside(const rule_id& id, CI& cp, RI& rp);


этот метод принимает какое именно правило (rule) нужно найти и устанавливает два итератора куда надо, или не устанавливает и возвращает false. проблема в том, что мне нужно вызывать его и из константных методов и для модификации. поэтому он шаблон - принимает const_iterator и просто iterator. проблема в том,что вызывать из константных методов его приходится так.
Код: sql
1.
2.
3.
bool rule_found = const_cast<custom_mandate*>(this)->search_inside(id,
        com_pos/*const_iterator*/,
        rule_pos/*const_iterator*/) /*const ?*/;

это потому что у него const в конце объявления метода не стоит. вопрос - его можно там как-нибудь "поставить" когда параметры conts_iterator и убрать когда они просто iterator? :)

ps вызывается это все только из методов этого класса, это в секции private так что и определение шаблона внутри файла cpp
...
Рейтинг: 0 / 0
выведение константности шаблонного метода
    #39065301
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexy_blackвопрос - его можно там как-нибудь "поставить" когда параметры conts_iterator и убрать когда они просто iterator?перегрузить бы надо:
Код: plaintext
1.
2.
template<class CI, class RI> bool search_inside(const rule_id& id, CI& cp, RI& rp);
template<class CI, class RI> bool search_inside(const rule_id& id, CI& cp, RI& rp) const;
...
Рейтинг: 0 / 0
выведение константности шаблонного метода
    #39065323
alexy_black
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorych,

тогда придется иметь две одинаковые функции.. то есть код этих шаблонов будет идентичен.
...
Рейтинг: 0 / 0
выведение константности шаблонного метода
    #39065400
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexy_blackegorych,
тогда придется иметь две одинаковые функции.. то есть код этих шаблонов будет идентичен.это зачем? из не константной вызвать константную никак не получится, думаешь? :)
...
Рейтинг: 0 / 0
выведение константности шаблонного метода
    #39065550
alexy_black
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorych,

нет, не получится :) я тоже сначала так сделал, обломался :)
когда вызываешь константный метод, то и контейнер он получает константный (от константного this). а такой контейнер даст только const_iterator, который не приравнять к обычному итератору, а именно обычный итератор и получает неконстантная функция как параметр :)

смысл функции в том, что она мне позиционирует два итератора и говорит получилось ли у неё это.
...
Рейтинг: 0 / 0
выведение константности шаблонного метода
    #39065638
alexy_black
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
походу это невозможно в рамках c++
придумал только с перегрузкой - в константном применять const_cast и вызывать неконстантный.
но потом оказалось, что, в данном случаи, код был полохо организован. сейчас применяю один только boost::ptr_set без std::map . необходимость в такой функции отпала.

но если знаете решение, напишите пожалуйста :)

ps: почему при оформлении не работают кнопки со стрелочками? :( не смог оформить
...
Рейтинг: 0 / 0
выведение константности шаблонного метода
    #39065648
Mozok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexy_black,

Сделать внешнюю шаблонную функцию поиска, которая будет отрабатывать по диапазону итераторов:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
template<class Iterator> bool do_search(Iterator begin, Iterator end);

template<class CI, class RI> bool search_inside(const rule_id& id, CI& cp, RI& rp) {
    do_search(overruled_.begin(), overruled_.end()); //неконст
}

template<class CI, class RI> bool search_inside(const rule_id& id, CI& cp, RI& rp) const {
    do_search(overruled_.begin(), overruled_.end()); //конст
}
...
Рейтинг: 0 / 0
выведение константности шаблонного метода
    #39065670
alexy_black
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mozok,

а кстати вариант! спасибо.
...
Рейтинг: 0 / 0
выведение константности шаблонного метода
    #39065955
Фотография PPA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mozokalexy_black,
Сделать внешнюю шаблонную функцию поиска
[/src]

А что значит внешнюю?
константными могут быть только методы класса.
...
Рейтинг: 0 / 0
выведение константности шаблонного метода
    #39067375
Mozok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PPA,
Вы абсолютно правы. И что?
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / выведение константности шаблонного метода
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]