LINUX.ORG.RU

[beginner] [c++] инициализация переменной в шаблоне зависимо от типа

 


0

0

Надеюсь, я доходчиво объясняю, чего мне хочется. А хочется мне инициализировать переменную var в такой функции:

template <typename T>
T foo()
{
   T var;
   // ...
   return var;
}

Проблема в том, что var может иметь как численное значение, так и быть строкой. Т. е. хочется реализовать что-то вроде такого псевдокода

template <typename T>
T foo()
{
   T var;
   var = (typeof(T) == "string") ? "" : 0;
   // ...
   return var;
}

Неинициализированная var отличается лишь ворнингом при компиляции, поэтому интерес больше из любопытства, чем для практической пользы.
anonymous

andrey@valkyrie ~ $ cat dummy.cpp
#include <string>
#include <iostream>

using namespace std;

template <typename T>
T initvar()
{
 return 123;
}

template<>
string initvar<string>()
{
 return "987";
}

template <typename T>
T foo()
{
 T var;
 var = initvar<T>();
 return var;
}

int main()
{
 cout << foo<string>() << " " << foo<int>() << endl;
 return 0;
}
andrey@valkyrie ~ $ g++ dummy.cpp
andrey@valkyrie ~ $ ./a.out
987 123
andrey@valkyrie ~ $   

generatorglukoff ★★
()
Ответ на: комментарий от alex_custov

Спасибо! я по первости пытался сделать T(0), но ничего не вышло, конечно...

anonymous
()
Ответ на: комментарий от anonymous

специализация шаблона.

См.

C++ Templates: The Complete Guide
By David Vandevoorde, Nicolai M. Josuttis

Publisher: Addison Wesley
Pub Date: November 12, 2002
ISBN: 0-201-73484-2
Pages: 552

alex_custov ★★★★★
()
Ответ на: комментарий от alex_custov

Как всё просто и элегантно. Спасибо вам.

anonymous
()

afaiu, на этой же идее основаны traits

dilmah ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.