Hierbei handelt es sich um ein einfaches Beispiel für Traits. Wer mehr über diese Technik wissen möchte findet z. B. hier Informationen:
http://thad.notagoth.org/cpptraits_intro/
#include <iostream>
#include <vector>
#include <boost/tr1/utility.hpp>
using namespace std;
template< typename T >
struct is_pointer{
static const bool value = false;
};
template< typename T >
struct is_pointer< T* >{
static const bool value = true;
};
template< typename T >
void foo(T x)
{
if (is_pointer<T>::value)
{
cout<<"pointer"<<endl;
}
else
{
cout<<"no pointer"<<endl;
}
}
template< bool b >
struct algorithm_selector {
template< typename T >
static void implementation( T& object )
{
cout<<"no pointer"<<endl;
}
};
template < >
struct algorithm_selector< true > {
template< typename T >
static void implementation( T& object )
{
cout<<"pointer"<<endl;
}
};
template< typename T >
void foo2(T x)
{
algorithm_selector<is_pointer<T>::value>::implementation(x);
}
int main()
{
int *x =0;
foo(x);
foo2(x);
system("pause");
}
Kommentare zum Snippet