Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

specjalizacja funkcji skladowej szablonu

2 views
Skip to first unread message

Krzysztof Poc

unread,
Jan 5, 2010, 11:10:30 AM1/5/10
to
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 :
(
};

Paweł Kierski

unread,
Jan 5, 2010, 4:07:50 PM1/5/10
to
W dniu 2010-01-05 17:10, Krzysztof Poc pisze:

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
ne...@pkierski.net

Maciej Pilichowski

unread,
Jan 6, 2010, 2:28:16 AM1/6/10
to
On Tue, 5 Jan 2010 08:10:30 -0800 (PST), Krzysztof Poc
<fajf...@wp.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

Maciej Pilichowski

unread,
Jan 6, 2010, 2:28:49 AM1/6/10
to
On Tue, 05 Jan 2010 22:07:50 +0100, Paweł Kierski <ne...@pkierski.net>
wrote:

> U mnie http://codepad.org/JU0TB9ZG działa.

Bo dales T = int ;-)

milego dnia, hej

Paweł Kierski

unread,
Jan 8, 2010, 4:11:20 PM1/8/10
to
W dniu 2010-01-06 08:28, Maciej Pilichowski pisze:

> On Tue, 05 Jan 2010 22:07:50 +0100, Paweł Kierski<ne...@pkierski.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
ne...@pkierski.net

Maciej Pilichowski

unread,
Jan 11, 2010, 2:24:56 AM1/11/10
to
On Fri, 08 Jan 2010 22:11:20 +0100, Paweł Kierski <ne...@pkierski.net>
wrote:

>W dniu 2010-01-06 08:28, Maciej Pilichowski pisze:
>> On Tue, 05 Jan 2010 22:07:50 +0100, Paweł Kierski<ne...@pkierski.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

Krzysztof Poc

unread,
Jan 22, 2010, 11:41:55 AM1/22/10
to
On Jan 8, 10:11 pm, Paweł Kierski <n...@pkierski.net> wrote:
> W dniu 2010-01-06 08:28, Maciej Pilichowski pisze:
>
> > On Tue, 05 Jan 2010 22:07:50 +0100, Paweł Kierski<n...@pkierski.net>
> > wrote:
>
> >>    U mniehttp://codepad.org/JU0TB9ZGdziała.

>
> > Bo dales T = int ;-)
>
>    Co innego - też działa:http://codepad.org/Iu2Emmfa
>
> --
>      Paweł Kierski
>      n...@pkierski.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;
}

0 new messages