C ++ одна специализация шаблона с несколькими параметрами шаблона
Hallo!
Я хотел бы специализировать только один из двух типов шаблонов. Например.template <typename A, typename B> class X
должна иметь специальную реализацию для одной функцииX<float, sometype>::someFunc()
.
Образец кода:
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();
}
Компиляция не удалась дляclass B
, Правда ли, что в С ++ это невозможно? Какой будет лучший обходной путь?
[редактировать]
template <float, typename I> void B<float, I>::someFunc();
приводит к main.h: 26: ошибка: «float» не является допустимым типом для параметра константы шаблона
template <typename I> void B<float, I>::someFunc();
приводит к main.h: 27: ошибка: недопустимое использование неполного типа "класс B"
И я использую GCC.
[редактировать]
Я не хочу специализировать весь класс, поскольку есть другие функции, которые не имеют специализации.