gcc template para

Fórumok

Sziasztok!

A következő kódrészlet gcc alatt nem fordul, míg Visual Studioban igen. Más fordítók alatt is probláma nélkül megy.

Nagyon fontos a portolás szempontjából, hogy a

XTCPoolSingleton< sizeof( Tx_ ) >::Alloc< Tx_ >( (int)size );

sor működjék.

Nem megoldás, ha az Alloc void*-ot ad vissza, és utólag cast-olok, ekkora módosítást nem akarok a kódban.

Megoldási javaslatok?


template< int SizeOfType >
class XTCPoolSingleton {
public:
    template< typename T_ > 
    static T_ * Alloc( int size ) 
    {
        return new T_;
    }

    static int * IntAlloc( int size ) 
    {
        return new int;
    }
};


template < class Tx_, int R_ >
class XCPoolAllocator
{
public:
	void allocate( int size )
    {
		XTCPoolSingleton< sizeof(  Tx_ ) >::Alloc< Tx_ >( (int)size );
		XTCPoolSingleton< sizeof( int ) >::Alloc< Tx_ >( (int)size );
		XTCPoolSingleton< R_ >::Alloc< Tx_ >( (int)size );
		XTCPoolSingleton< sizeof( Tx_ ) >::IntAlloc( (int)size );
    }
};

void Func() {
	XCPoolAllocator< int, 4 > xxx;
	xxx.allocate( 100 );
}

Köszi.

Hozzászólások

Megoldva:

XTCPoolSingleton< sizeof( Tx_ ) >::template Alloc< Tx_ >( (int)size );

De még mindig nem értem, miért kell súgni a gcc-nek.

Innentől már csak az a kérdés, hogy miért szól így a szabvány, ha láthatóan nem okozott gondot bizonyos fordítóknak enélkül kitalálni a megoldást...

(Nem, C++ szabványról beszélve a "csak" nem válasz. :) )

"...handing C++ to the average programmer seems roughly comparable to handing a loaded .45 to a chimpanzee."
-- Ted Ts'o

Igen, a miért az sajnos nincs benne...
Nem világos teljesen ... ha találsz valamit, kitennéd ide?
( igazából egy olyan példát lenne jó találni, ami a szabvány ezen részéhez teljesen ragaszkodó fordítókkal működik, míg a többivel nem; bár meglehet, hogy ebből van a kevesebb :-) )

Ez szerintem másról szól (typename vs template). Persze köze lehet a dologhoz...

A Comeau oldalon ezt írják:
"The Standard requires it in this context, but if it's not, some compilers may still accept it (by figuring it out)."

Valami olyasmi lehet itt, mint a dupla template vs operator>> esetben, hogy a fordítók látják hogy mi a gond, de nem fogadják el, legalábbis a C++0x-ig...

"...handing C++ to the average programmer seems roughly comparable to handing a loaded .45 to a chimpanzee."
-- Ted Ts'o