¡Hola!C++ especialización de plantilla única con múltiples parámetros de plantilla
Me gustaría especializar solo uno de los dos tipos de plantillas. P.ej. template <typename A, typename B> class X
debe tener una implementación especial para una sola función X<float, sometype>::someFunc()
.
Código de ejemplo:
main.h:
#include <iostream>
template <typename F, typename I>
class B
{
public:
void someFunc()
{
std::cout << "normal" << std::endl;
};
void someFuncNotSpecial()
{
std::cout << "normal" << std::endl;
};
};
template <typename I>
void B<float, I>::someFunc();
main.cpp:
#include <iostream>
#include "main.h"
using namespace std;
template <typename I>
void B<float, I>::someFunc()
{
cout << "special" << endl;
}
int main(int argc, char *argv[])
{
B<int, int> b1;
b1.someFunc();
b1.someFuncNotSpecial();
B<float, int> b2;
b2.someFunc();
b2.someFuncNotSpecial();
}
compilación falla por class B
. ¿Es cierto que esto no es posible en C++ de esta manera? ¿Cuál sería la mejor solución?
[editar]
template <float, typename I> void B<float, I>::someFunc();
conduce a main.h: 26: error: 'flotar' no es un tipo válido para un parámetro constante plantilla
template <typename I> void B<float, I>::someFunc();
conduce a main.h: 27: error: uso no válido del tipo incompleto 'clase B'
Y estoy usando gcc.
[editar]
no quiero especializar a toda la clase, ya que hay otras funciones que no tienen una especialización.
¿La plantilla de clase A está relacionada con su pregunta? – Doug
Pensé que haría la pregunta más fácil de entender. Lo eliminaré. – tauran
Esto se ha preguntado cientos de veces en stackoverflow :) Creo que algunos de nosotros podríamos configurar una plantilla real de preguntas frecuentes con tales preguntas. La gente puede consultar las preguntas frecuentes para ver si su pregunta es respondida, en lugar de tener que buscar a un imbécil. –