你好!
我只想专门化两种模板类型中的一种。例如template <typename A, typename B> class X
,应该对单个函数有一个特殊的实现X<float, sometype>::someFunc()
。
示例代码:
主.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();
主.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
。这是真的吗,这在 C++ 中是不可能的吗?最好的解决方法是什么?
[编辑]
template <float, typename I>
void B<float, I>::someFunc();
导致 main.h:26: 错误:'float' 不是模板常量参数的有效类型
template <typename I>
void B<float, I>::someFunc();
导致 main.h:27: 错误:无效使用不完整类型 'class B'</p>
我正在使用 gcc。
[编辑]
我不想专门化整个班级,因为还有其他没有专门化的功能。