Slavka_online
@Slavka_online
Интересная личность

Использованее typeid классе шаблоне

вот часть класса с рассматриваемой функцией
template <class W>
class CBuffer
{ private:
	 W *arr;
	 int len;
	 int nowIndex;

	 W & operator[](unsigned int i)
   {
	if (i<len) {
	  return arr[i];
	}
}

void  getElement(TListBox* LB)
{
if(typeid(arr)==typeid(CWeather*)){

   W tmp;
   LB->Items->Clear();
   for (int i = 0; i <len; i++) {

   if(!(arr[i]==tmp)){
	LB->Items->Add(AnsiString("Температура: ") + arr[i].getsTemperature());
	LB->Items->Add("Давление: " +arr[i].getsPressure());
	LB->Items->Add("Скорость ветра: " + arr[i].getsWindSpeed());
	LB->Items->Add("\Направление ветра: "+arr[i].getsWindDirection());
	LB->Items->Add("---------------------------");
   }
   }
   }

   if (typeid(arr)==typeid(short*))
	{
	  LB->Items->Clear();
	  for (int i = 0; i <len; i++) {
		  LB->Items->Add(arr[i]);
	  }
   }
}


в самой проге:
CBuffer<CWeather> *buf = new CBuffer<CWeather>();
CBuffer<short> *buf2  = new CBuffer<short>();


так вот программа не компилируется, жалуется на не соответствие типов, не знаю почему она лезет в оба if сразу, т.е она либо принимает значение CWeather тогда жалуется на вывод LB->Items->Add(arr[i]); и наоборот
  • Вопрос задан
  • 2442 просмотра
Пригласить эксперта
Ответы на вопрос 3
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
typeid классе шаблоне

Крабэ шмеле.

так вот программа не компилируется, жалуется на не соответствие типов, не знаю почему

Что вам мешает узнать? Вы умеете читать сообщения об ошибках?
Ответ написан
kosmos89
@kosmos89
Во-первых, как уже сказали, в данном случае следует использовать специализацию.
А во-вторых, существует такая штука как www.cplusplus.com/reference/type_traits/is_same
Ответ написан
Комментировать
AxisPod
@AxisPod
Ну потому что код компилируется весь, static_if как бы пока нет, есть для этого обходные манёвры. Но проблема в том, что вы хотите выполнить compile-time проверку в run-time, увы, так нельзя.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы