Есть пачка отладочных функций преобразующих пользовательский тип в нечто удобочитаемое:
QString toString(const MyType &val);
Но иногда хочется получить не только представление в виде строки, а запихать всё это дело сразу в QDebug (отладочный поток вывода для Qt). Само собой, для каждой из этих MyType можно реализовать еще и
QDebug operator<<( QDebug debug, const MyTypeT &val )
который только и будет что делать – вызывать toString, но хочется сделать разом, т.е. нужен шаблон. Наивный шаблонный вариант само собой не прокатывает и нужно разрешить оператор только для тех типов, для который функция toString реализованна. Как подобное реализовать для случая если toString является членом класса который необходимо задампировать вроде всё понятно, но с внешней функцией выходит какая-то хрень, слабоват я в шаблонной магии
Так что вопроса два:
1) Как сделать?
2) Что сейчас по шаблонной магии модно читать?
Здравствуйте, kaa.python, Вы писали:
KP>Но иногда хочется получить не только представление в виде строки, а запихать всё это дело сразу в QDebug (отладочный поток вывода для Qt). Само собой, для каждой из этих MyType можно реализовать еще и
KP>KP>QDebug operator<<( QDebug debug, const MyTypeT &val )
KP>
KP>который только и будет что делать – вызывать toString, но хочется сделать разом, т.е. нужен шаблон. Наивный шаблонный вариант само собой не прокатывает и нужно разрешить оператор только для тех типов, для который функция toString реализованна. Как подобное реализовать для случая если toString является членом класса который необходимо задампировать вроде всё понятно, но с внешней функцией выходит какая-то хрень, слабоват я в шаблонной магии
http://rsdn.org/forum/cpp.applied/6746046Автор: niXman
Дата: 03.04.17
Здравствуйте, night beast, Вы писали:
NB>http://rsdn.org/forum/cpp.applied/6746046Автор: niXman
Дата: 03.04.17
Да, оно, починил. Как оказалось, всё куда проще чем казалось
Здравствуйте, kaa.python, Вы писали:
KP>Так что вопроса два:
KP>1) Как сделать?
Вот так можно сделать operator<<(), который будет вызываться только если для типа определена функция toString. Если таковой нет, то будет ошибка времени компиляции.
https://wandbox.org/permlink/t1n9IzCRQhVcEuNS
KP>2) Что сейчас по шаблонной магии модно читать?
Такое ощущение, что лучше всего сейчас это описывается в блогах. Из англоязычных хорошие посты на эту тему, емнип, всплывают на
http://foonathan.net/ и
https://arne-mertz.de/. Впрочем, все хорошие посты на эту тему обязательно всплывают на
reddit/r/cpp или в G+ группе
Meeting C++.