-
1. Data: 2010-01-05 16:10:30
Temat: specjalizacja funkcji skladowej szablonu
Od: Krzysztof Poc <f...@w...pl>
Witajcie
W jaki sposob moge zaimplementowac specjalizacje funkcji skladowej
szablonu.
Wiem, ze moge to zrobic dla calej klasy, ale ja chcialbym to zrobic
tylko dla
funkcji skladowej. Ponizej zalaczam przyklad ktory sie nie kompiluje.
dzieki za pomoc
template <class T>
class MyContainer
{
public:
void Sum ( T elem ) {}
void Sum ( char elem ) {} // !!! specjalizacja, nie kompiluje sie :
(
};
-
2. Data: 2010-01-05 21:07:50
Temat: Re: specjalizacja funkcji skladowej szablonu
Od: Paweł Kierski <n...@p...net>
W dniu 2010-01-05 17:10, Krzysztof Poc pisze:
> Witajcie
>
> W jaki sposob moge zaimplementowac specjalizacje funkcji skladowej
> szablonu.
> Wiem, ze moge to zrobic dla calej klasy, ale ja chcialbym to zrobic
> tylko dla
> funkcji skladowej. Ponizej zalaczam przyklad ktory sie nie kompiluje.
>
> dzieki za pomoc
>
> template<class T>
> class MyContainer
> {
> public:
> void Sum ( T elem ) {}
> void Sum ( char elem ) {} // !!! specjalizacja, nie kompiluje sie :
> (
> };
U mnie http://codepad.org/JU0TB9ZG działa. Tylko ten nawias
otwierający z przed klamrowego zamykającego definicję klasy trzeba
wywalić (chyba, że to artefakt kopiowania do czytnika).
--
Paweł Kierski
n...@p...net
-
3. Data: 2010-01-06 07:28:16
Temat: Re: specjalizacja funkcji skladowej szablonu
Od: Maciej Pilichowski <P...@g...com>
On Tue, 5 Jan 2010 08:10:30 -0800 (PST), Krzysztof Poc
<f...@w...pl> wrote:
>
>template <class T>
>class MyContainer
>{
>public:
> void Sum ( T elem ) {}
> void Sum ( char elem ) {} // !!! specjalizacja, nie kompiluje sie :
>(
>};
To nie jest specjalizacja, tylko przeciazenie. I taka definicja sie
polozy w przypadku T = char, bo nie mozesz miec dwoch metod/funkcji o
identycznych sygnaturach.
milego dnia, hej
-
4. Data: 2010-01-06 07:28:49
Temat: Re: specjalizacja funkcji skladowej szablonu
Od: Maciej Pilichowski <P...@g...com>
On Tue, 05 Jan 2010 22:07:50 +0100, Paweł Kierski <n...@p...net>
wrote:
> U mnie http://codepad.org/JU0TB9ZG działa.
Bo dales T = int ;-)
milego dnia, hej
-
5. Data: 2010-01-08 21:11:20
Temat: Re: specjalizacja funkcji skladowej szablonu
Od: Paweł Kierski <n...@p...net>
W dniu 2010-01-06 08:28, Maciej Pilichowski pisze:
> On Tue, 05 Jan 2010 22:07:50 +0100, Paweł Kierski<n...@p...net>
> wrote:
>
>> U mnie http://codepad.org/JU0TB9ZG działa.
>
> Bo dales T = int ;-)
Co innego - też działa: http://codepad.org/Iu2Emmfa
--
Paweł Kierski
n...@p...net
-
6. Data: 2010-01-11 07:24:56
Temat: Re: specjalizacja funkcji skladowej szablonu
Od: Maciej Pilichowski <P...@g...com>
On Fri, 08 Jan 2010 22:11:20 +0100, Paweł Kierski <n...@p...net>
wrote:
>W dniu 2010-01-06 08:28, Maciej Pilichowski pisze:
>> On Tue, 05 Jan 2010 22:07:50 +0100, Paweł Kierski<n...@p...net>
>> wrote:
>>
>>> U mnie http://codepad.org/JU0TB9ZG działa.
>>
>> Bo dales T = int ;-)
>
> Co innego - też działa: http://codepad.org/Iu2Emmfa
Dobra, powiem to wprost ;-D Bo dales T != char. Daj char :-)
milego dnia, hej
-
7. Data: 2010-01-22 16:41:55
Temat: Re: specjalizacja funkcji skladowej szablonu
Od: Krzysztof Poc <f...@w...pl>
On Jan 8, 10:11 pm, Paweł Kierski <n...@p...net> wrote:
> W dniu 2010-01-06 08:28, Maciej Pilichowski pisze:
>
> > On Tue, 05 Jan 2010 22:07:50 +0100, Paweł Kierski<n...@p...net>
> > wrote:
>
> >> U mniehttp://codepad.org/JU0TB9ZGdziała.
>
> > Bo dales T = int ;-)
>
> Co innego - też działa:http://codepad.org/Iu2Emmfa
>
> --
> Paweł Kierski
> n...@p...net
Kod z ponizsza modyfikacja tez sie u mnie kompiluje, ale niestety
wolana jest jedynie generyczna funkcja.
Gdzies wyczytalem ze musze wyspecjalizowac szablon zeby
wyspecjalizowac konkretna funkcje.
Czy to prawda ?
#include <iostream>
using namespace std;
template <class T>
class MyContainer
{
private:
T m_elem;
public:
MyContainer ( T elem ) : m_elem ( elem ) {}
void Sum ( T elem )
{
m_elem += elem;
cout << "generic" << endl;
}
template <char>
void Sum ( char elem ) // nie jest wolany
{
cout << "specialization" << endl;
}
};
int main ( void )
{
MyContainer<int> containerInt ( 10 );
containerInt . Sum ( 5 );
MyContainer<char> containerChar ( 'A' );
containerChar . Sum ( 'B' ); // wolany jest generic :(
return 0;
}