Template-Templates
Verfasst: Mi Aug 20, 2008 9:46 pm
Hallo,
ich musste mich grade mal wieder in Template-Templates arrangieren und feststellen, dass ich ziemlich aus der Übung diesbezüglich bin.
Am Schluss habe ich es dann doch noch lauffähig bekommen.
Wenn also jemand mal Probleme mit Template-Templates hat (oder ich wieder ein Beispiel suche), so findet sich hier nun ein Beispiel:
In den Klammern die erwarteten Werte.
ich musste mich grade mal wieder in Template-Templates arrangieren und feststellen, dass ich ziemlich aus der Übung diesbezüglich bin.
Am Schluss habe ich es dann doch noch lauffähig bekommen.
Wenn also jemand mal Probleme mit Template-Templates hat (oder ich wieder ein Beispiel suche), so findet sich hier nun ein Beispiel:
Code: Alles auswählen
#include "stdio.h"
template< typename base >
class Handler_A
{
public:
base Value;
Handler_A( base value ) : Value( value ) {}
};
template< typename base >
class Handler_B
{
public:
base Value;
Handler_B( base value ) : Value( 2*value ) {}
};
template< typename base
, template< typename base > class handler >
class Container
{
private:
handler<base> Handler;
public:
Container( base value ) : Handler( value )
{
}
base GetValue()
{
return Handler.Value;
}
};
template < typename base
, template< typename base > class handlerA
, template< typename base > class handlerB >
int add( Container< base, handlerA > &a, Container< base, handlerB > &b )
{
return a.GetValue() + b.GetValue();
}
template < template < typename base > class handler_r
, typename base
, template < typename base > class handler_a
, template < typename base > class handler_b >
Container< base, handler_r > func( Container< base, handler_a > &a, Container< base, handler_b > &b )
{
return Container< base, handler_r >( a.GetValue() + b.GetValue() );
}
int main( void )
{
Container< int, Handler_A > a( 1 );
Container< int, Handler_B > b( 1 );
printf( "a (1): %d, b (2): %d\n", a.GetValue(), b.GetValue() );
printf( "add (3): %d\n", add( a, b ) );
printf( "funcA (3): %d\n", func< Handler_A, int, Handler_A, Handler_B >( a, b ).GetValue() );
printf( "funcA (3): %d\n", func< Handler_A >( a, b ).GetValue() );
printf( "funcB (6): %d\n", func< Handler_B, int, Handler_A, Handler_B >( a, b ).GetValue() );
printf( "funcB (6): %d\n", func< Handler_B >( a, b ).GetValue() );
return 0;
}