Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.12.2010, 00:28   #11
Гром
Старожил
 
Аватар для Гром
 
Регистрация: 21.03.2009
Сообщений: 2,193
По умолчанию

Цитата:
Тут остатется лишь реализовать SaveToStreamDetector<T>
Это, как я понимаю, реализуется списком специализаций для каждого конкретного класса?
Простые и красивые программы - коды программ + учебник C++
Создание игры - взгляд изнутри - сайт проекта
Тема на форуме, посвященная ему же
Гром вне форума Ответить с цитированием
Старый 06.12.2010, 00:36   #12
_Ч_
Форумчанин
 
Регистрация: 07.01.2010
Сообщений: 141
По умолчанию

нет. такое детектор пишется один на все возможные варианты классов. специальных специализаций для каждого класса, который вы напишите в будущем писать не надо. детектор сам сможет узнать, есть ли у класса требуемая ф-ия или нет.
_Ч_ вне форума Ответить с цитированием
Старый 06.12.2010, 00:51   #13
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

мне кажется что для совместимости с int(и тд) такое не полетит.

просто я хочу добится вот чего(подобие интерфейса как в яве):
то есть мне надо будет лишь реализовать методы LoadFromStream(для >>) и SaveToStream(<<), и все класс готов к записи в поток, но если его нет то используется стандартный (через write) оператор.

в книге посмотрю, но позже, надеюсь это решение проблемы моей.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 06.12.2010, 00:51   #14
still_alive
Great Code Monkey
Форумчанин
 
Аватар для still_alive
 
Регистрация: 09.08.2007
Сообщений: 533
По умолчанию

Если не передумали:
http://stackoverflow.com/questions/2...ions-existence
Там смотрел только первый ответ - реализация по Александреску. Может ниже и по Страуструпу найдется или их гибрид, или через свойства - не знаю, не читал. В Саттере, впрочем, вроде описано все.

http://www.rsdn.ru/forum/cpp/3722136.1.aspx
Хотя здесь буст не нужен. Из пушки по воробьям.
still_alive вне форума Ответить с цитированием
Старый 06.12.2010, 01:01   #15
_Ч_
Форумчанин
 
Регистрация: 07.01.2010
Сообщений: 141
По умолчанию

Кстати, возможно наличине ф-ии не только определенной сигнатуры но и с определенным именем определить не получится. Подумать надо. Но то, что определить наличие у класса метода с определенной сигнатурой можно - это 100%
_Ч_ вне форума Ответить с цитированием
Старый 06.12.2010, 01:08   #16
_Ч_
Форумчанин
 
Регистрация: 07.01.2010
Сообщений: 141
По умолчанию

ну решение вашей проблемы я вам уже описал. поступить так, как делается со стандартными потоками. получится без всяких компайл-тайм извращений. единственное неудобство - это писать рядом с классом, у которого есть метод сериализации свободную ф-ию operator <<. но в этом можно и свой плюс найти. тут нет закладки на имя метода, который выполняет сериализацию.

Вот как-то так:

Код:
//////////////////////////////////////////////////////////////

class Stream
{
public:
  void Write(const void* data, size_t size)
  {
    // ...
  }
};

template <typename T>
Stream& operator << (Stream& s, const T& obj)
{
  s.Write(&obj, sizeof(T));
  return s;
}

//////////////////////////////////////////////////////////////

class Foo
{
public:
  void Serialize(Stream& s)
  {
    // ...
  }
};

Stream& operator << (Stream& s, const Foo& foo)
{
  foo.Serialize(s);
  return s;
}

//////////////////////////////////////////////////////////////

Последний раз редактировалось _Ч_; 06.12.2010 в 01:17.
_Ч_ вне форума Ответить с цитированием
Старый 06.12.2010, 02:54   #17
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

Цитата:
ну решение вашей проблемы я вам уже описал. поступить так, как делается со стандартными потоками. получится без всяких компайл-тайм извращений. единственное неудобство - это писать рядом с классом, у которого есть метод сериализации свободную ф-ию operator <<. но в этом можно и свой плюс найти. тут нет закладки на имя метода, который выполняет сериализацию.
он мне самому известен, я же написал в чем истинная цель.

за ссылки спасибо, завтра посмотрю, проверю.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 08.12.2010, 04:28   #18
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

хоть ты тресни пока не доходит никак
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 08.12.2010, 13:43   #19
still_alive
Great Code Monkey
Форумчанин
 
Аватар для still_alive
 
Регистрация: 09.08.2007
Сообщений: 533
По умолчанию

Цитата:
Сообщение от Пепел Феникса Посмотреть сообщение
хоть ты тресни пока не доходит никак
А конкретно?
Вам нужно примерно это? http://liveworkspace.org/code/ee2c39...50a70a70e9f509
still_alive вне форума Ответить с цитированием
Старый 08.12.2010, 13:47   #20
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

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

кстати а можно как то специализировать шаблон через перечисление типов?(или придется для каждого личную специализацию писать?)
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Шаблонные функции в классе 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