Как обрабатывать литералы в шаблонах? - PullRequest
0 голосов
/ 02 апреля 2012

Я столкнулся с проблемой, с которой, я уверен, уже столкнулись многие другие.
Как обрабатывать литералы в шаблонах?
Пожалуйста, отошлите мой код:

template<typename T, typename U>
static void Swap( T& a, U& b )
{
        T temp;
        temp = a;
        a    = (T) b;
        b    = temp;
}

int main()
{
   int i = 10, j = 20;
   //! Working
   Swap<int,int>(i,j);

   int p = 50; double q = 100.0;
   //! Working
   Swap<int,double>(p,q);

  //How to handle this case ?
   Swap<int,int>(5,10);

   return 0;
}

Ответы [ 2 ]

2 голосов
/ 02 апреля 2012

Проблема в том, что вы пытаетесь привязать временную ссылку к ссылке, что не разрешено стандартом.
Вы можете привязать временные ссылки только к постоянной ссылке.Учитывая, что Вы должны переосмыслить свою логику.

2 голосов
/ 02 апреля 2012

Поскольку 5 и 10 являются значениями, их нельзя передать по ссылке.

Кроме того, вызов даже не имеет смысла:

 Swap<int,int>(5,10);

Делатьвы ожидаете, что 5 и 10 поменяются местами между собой или что?

...