Mam szablon, który chciałbym warunkowo skompilować w zależności od typu argumentu. Dbam tylko o różnicowanie "zwykłych starych danych" (POD), tj. Liczb całkowitych, itp. Lub klas/struktur. Używam C++ VS2008 w systemie Windows.Kompilacja warunkowa przy użyciu cech typu Boost
template<T>
class foo
{
void bar(T do_something){
#if IS_POD<T>
do something for simple types
#else
do something for classes/structs
#endif
}}
Oglądałem bibliotekę doładowania i widzę, że wydają się mieć to, czego chcę. Jednak nie rozumiem, jaka byłaby poprawna składnia instrukcji #if
.
Każda pomoc zostanie doceniona.
Edit --- Po przeczytaniu odpowiedzi, widzę coś przeoczyłem w mojej definicji pytanie. Klasa foo
jest klasą szablonową, która wymaga tylko wersji bar
, która jest poprawna dla class type T
. Szukałem rozwiązania, które można rozwiązać w czasie kompilacji. Mam nadzieję, że to rozwiąże mój problem.
Będzie to błąd kompilacji, gdy szablon jest instancja klasy, 'T' jest stała, i w tym momencie, gdy spróbujesz zadzwonić' bar' będzie zobaczyć dwie definicje i nie będzie można skompilować jeden z nich. Zauważ, że to nie jest SFINAE, ponieważ nie będzie to niepowodzenie zastępowania - typ jest naprawiony przed utworzeniem elementu (tak myślę, nigdy nie jestem pewien z tymi rzeczami :)). –