Войти
ФлеймФорумПрограммирование

c++ шаблонство. узнать тип в compile time (2 стр)

Страницы: 1 2
#15
3:13, 17 фев. 2013

MarkoPolo
>edit: почему я за перегрузку - все видели, как перегрузкой operator << класс может описать, каким конкретно образом он >умеет себя вывести в поток? не вижу разницы в поставленной автором задаче

Снаружи это действительно перегруженный operator<<
описанный выше финт нужен для корректной десериализации коллекции

template <typename TKey, typename TValue>
MyDataStream& operator>>(MyDataStream&, QMap<TKey,TValue>&)
{/*code*/}

если TKey - это Base* или один из его наследников, то для того, чтобы корректно "зарезолведить" указатели необходимы дополнительные финты)


#16
13:56, 17 фев. 2013

cNoNim
Chaos_Optima

#include <iostream>

class foo{
  int a;
};

class bar1:public foo{
};

class bar2:public foo{
};

void func1(const foo& abc){
  std::cout<<"func1 foo\n";
}

void func1(const bar1& abc){
  std::cout<<"func1 bar1\n";
}

void func1(const bar2& abc){
  std::cout<<"func1 bar2\n";
}

int main(){
  foo* a = new bar1;
  foo* b = new bar2;
  foo* c = new foo;

  func1(*a);
  func1(*b);
  func1(*c);

  delete a;
  delete b;
  delete c;
  
  return 0;
}
marko@KOMP4 ~
$ g++ 123.cpp

marko@KOMP4 ~
$ ./a
func1 foo
func1 foo
func1 foo
#17
15:06, 17 фев. 2013

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

#18
15:24, 17 фев. 2013

kipar
Но, зачем это надо? Оно ведь и так само по себе тогда работает, вообще без всяких. Вопроса тогда вообще нет же!

#19
15:34, 17 фев. 2013

MarkoPolo
Кре Архитектурные особенности кресто, кхм, образа мышления программистов на с++, полагаю.

#20
15:51, 17 фев. 2013

MarkoPolo
> Вопроса тогда вообще нет же!
да ви что O_o

#21
19:30, 17 фев. 2013

MarkoPolo
ты сможешь serialize для int вызвать?

Страницы: 1 2
ФлеймФорумПрограммирование

Тема в архиве.