![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
![]()
в общем такая ситуация:
Код:
или никак? ну или хотя бы, можно компилю сказать что объекты произвольные от опред класса надо обрабатывать иначе? ЗЫ:кстати маленький вопрос, это нормальное организация оператора или можно void ставить как тип возврата?(в принципе думаю что можно, ведь будет Stream<<T, а не Stream=Stream<<T, но хочу узнать мнение опытных) Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. Последний раз редактировалось Пепел Феникса; 05.12.2010 в 23:52. |
![]() |
![]() |
![]() |
#2 | |
Старожил
Регистрация: 21.03.2009
Сообщений: 2,193
|
![]()
Сигнатуры у функций полностью идентичны, поэтому такой код будет считаться ошибкой. Если уж так хочется выбирать из двух вариантов, то либо делайте функции с разной сигнатурой, либо логику выбора засовывайте внутрь тела функции. Хотя я вообще не уверен в безопасности и предсказуемости такого подхода.
Цитата:
Код:
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта Тема на форуме, посвященная ему же |
|
![]() |
![]() |
![]() |
#3 | ||
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
![]() Цитата:
мне нужно знать будет на этапе компиляции, есть ли у объекта o метод SaveToStream... у меня есть лишь один вариант, он наверно верный. Код:
Цитата:
![]() Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
||
![]() |
![]() |
![]() |
#4 |
Форумчанин
Регистрация: 07.01.2010
Сообщений: 141
|
![]()
Такое возможно. За примером можно сходить к саттеру. у него есть глава о требовании наличия ф-ии члена у класса. Это свойство класса определяется на этапе компиляции.
|
![]() |
![]() |
![]() |
#5 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
![]()
эммм...к кому сходить?
я понимаю что в итоге сведется похоже к #if #else #endif, но какое условие? Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
![]() |
![]() |
![]() |
#6 |
Форумчанин
Регистрация: 07.01.2010
Сообщений: 141
|
![]()
нет. макросов там не будет. У Саттера в Решения сложных задач есть правильная глава. Она так и называется: Требования наличия функций-членов.
|
![]() |
![]() |
![]() |
#7 |
C++ hater
Старожил
Регистрация: 19.07.2009
Сообщений: 3,333
|
![]()
я может чего то не понимаю, но почему нельзя специадизировать шаблон? на объект, у которого есть метод savetostream вызывать соответствующуу функцию, на все другие - write
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay
My other car is cdr. Q: Whats the object-oriented way to become wealthy? A: Inheritance |
![]() |
![]() |
![]() |
#8 |
Старожил
Регистрация: 28.01.2009
Сообщений: 21,000
|
![]()
и мне для каждого класса писать специализацию?
![]() Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел. Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите. |
![]() |
![]() |
![]() |
#9 |
Форумчанин
Регистрация: 07.01.2010
Сообщений: 141
|
![]()
Я вот по памяти накидал один из возможных вариантов. не компилил это да и не доделанный он. Тут главное идею уловить.
Код:
О том, как это продетектить в компайлтайме я уже сказал где можно посмотреть. Возможны и другие реализации. это лишь одна из. В бусте также есть классы, которые определяют свойства других классов. Возможно там уже есть готовый детектор. |
![]() |
![]() |
![]() |
#10 |
Форумчанин
Регистрация: 07.01.2010
Сообщений: 141
|
![]()
вообще в вашем случае стоит пойти немного другим путем. сделать так, как сделано в стл. а именно. там есть std:
![]() ![]() |
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Шаблонные функции в классе | Impuls1989 | Общие вопросы C/C++ | 5 | 20.09.2010 09:04 |
Почему нельзя разбивать на отдельные файлы шаблонные функции и классы? | lordius | Visual C++ | 22 | 08.07.2010 09:49 |
Как удалить определенную страницу? | Мультипликатор | Microsoft Office Word | 1 | 28.06.2010 17:39 |
шаблонные строковые функции | MrKarapuz | Общие вопросы C/C++ | 7 | 09.11.2009 15:07 |
Как напечатать определенную страницу | k1r1ch | Microsoft Office Excel | 14 | 10.07.2009 18:29 |