Tengo una plantilla que me gustaría compilar condicionalmente según el tipo de argumento. Solo me importa diferenciar entre "datos antiguos simples" (POD), es decir, enteros, etc. o clases/estructuras. Estoy usando C++ VS2008 en Windows.Compilación condicional usando caracteres de tipo 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
}}
He estado buscando en la biblioteca de impulso y puedo ver que parecen tener lo que quiero. Sin embargo, no entiendo cuál sería la sintaxis correcta para la declaración #if
.
Cualquier ayuda sería apreciada.
Editar --- Después de leer las respuestas, veo que pasé por alto algo en mi definición de la cuestión. La clase foo
es una clase con plantilla que solo necesita instanciar la versión de bar
que es correcta para class type T
. Estaba buscando una solución que pueda resolverse en tiempo de compilación. Espero que esto aclare mi problema.
Este será un error de compilación, una vez que la plantilla de clase se instancia, 't' es fijo, y en ese momento cuando se trate de llamar' bar' sean verá las dos definiciones y se producirá un error al compilar uno de ellos. Tenga en cuenta que esto no es SFINAE, ya que no será una falla de sustitución, el tipo se soluciona antes de la instanciación del miembro (o eso creo, nunca estoy seguro con estas cosas :)). –