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.

[редактировать]

Я не хочу специализировать весь класс, поскольку есть другие функции, которые не имеют специализации.

Ответы на вопрос(3)

Ваш ответ на вопрос