Vra

Hierdie artikel beskryf'n manier, in C#, toelaat dat die toevoeging van arbitrêre waarde tipes wat'n + operateur gedefinieer vir hulle.In wese is dit kan die volgende kode:

public T Add(T val1, T val2)
{
   return val1 + val2;
}

Hierdie kode nie stel as daar is geen waarborg dat die T-tipe het'n definisie vir die ' + ' - operateur, maar die effek is bereik met'n kode soos hierdie:

public T Add(T val1, T val2)
{
   //Num<T> defines a '+' operation which returns a value of type T
   return (new Num<T>(val1) + new Num<T>(val2));
}

Volg die skakel om te sien hoe die Num klas bereik.In elk geval, op die vraag.Is daar enige manier om dieselfde effek te bereik in C of C++?Vir die vreemde, die probleem wat ek probeer om op te los is om toelaat dat'n CUDA kern te wees meer buigsaam/general deur toe te laat dit om te werk op meer tipes.

Update: Vir .NETTO, Marc Gravell het'n nut biblioteek wat los die operateur probleem baie elegant.

Was dit nuttig?

Oplossing

As gevolg van die manier templates is saamgestel in C ++, eenvoudig doen:

template < class T >
T add(T const & val1, T const & val2)
{
    return val1 + val2;
}

will work, jy sal 'n Stel fout kry vir elke tipe waar 'n operateur + nie gedefinieer word.

C ++ templates genereer kode vir elke tipe Instantiëring, so vir elke tipe T-kode sal gegenereer word wat die regte ding doen. Op hierdie manier C ++ hoef nie Num <> kullery.

In plain C, dit is nie moontlik so ver as wat ek weet.

Ander wenke

In C++ dit is eenvoudig nie'n probleem. Die kode in jou eerste monster werk as letterlik vertaal in C++ (ETA:as Pieter het), maar ek kan nie dink aan enige situasie waar direk met behulp van + sal nie werk nie.Is jy op soek vir'n oplossing vir'n probleem wat nie bestaan nie.

Dit kan maklik gedoen word in C ++ maatvorms gebruik:


template <typename T>
T Add(T val1, T val2)
{
  return val1 + val2;
}

Let egter daarop dat hierdie moet word gedefinieer in 'n kop-lêer, en jy waarskynlik wil ook die parameters slaag deur konst verwysing in plaas van deur waarde.

Dit kan nie gedoen word in 'n plat C at all.

Dit kan gedoen word in C sowel, maar ek is nie seker of dit voldoen aan die probleem vereistes, met 'n Makro.

#define ADD(A,B) (A+B)

Templates in C ++. In C, nie sonder massiewe moeite en oorhoofse.

template<typename T> 
T add(T x, T y)
{ 
    return x + y;
}
Gelisensieer onder: CC-BY-SA met toeskrywing
Nie verbonde aan StackOverflow
scroll top