C++ 运算符()模板专门化
我正在尝试对模板操作符进行专门化,模板如下所示:C++ 运算符()模板专门化,c++,templates,C++,Templates,我正在尝试对模板操作符进行专门化,模板如下所示: template <typename Iterator1, typename Iterator2> ResultType operator()(Iterator1 a, Iterator2 b, size_t size, ResultType worst_dist = -1) const template <> float operator()<float*,float*>(float* a, float
template <typename Iterator1, typename Iterator2>
ResultType operator()(Iterator1 a, Iterator2 b, size_t size, ResultType worst_dist = -1) const
template <>
float operator()<float*,float*>(float* a, float const* b, unsigned long size, float worst_dist = -1) const
模板
ResultType运算符()(迭代器1A,迭代器2B,大小\u t大小,ResultType最差\u dist=-1)常量
在我完成专业化之后,看起来是这样的:
template <typename Iterator1, typename Iterator2>
ResultType operator()(Iterator1 a, Iterator2 b, size_t size, ResultType worst_dist = -1) const
template <>
float operator()<float*,float*>(float* a, float const* b, unsigned long size, float worst_dist = -1) const
模板
浮点运算符()(浮点*a,浮点常量*b,无符号长大小,浮点最差距离=-1)常量
我在编译过程中遇到错误:
无法在类范围内专门化函数“operator()”
所有这些函数都在结构模板中
我很乐意得到一些帮助。
谢谢。你为什么要专门指定这个操作员?无论如何,您将无法使用依赖于专门化(即显式提供[某些]模板参数)的语法调用它!只要使用重载,你就可以了。虽然有时需要或甚至有必要在显式指定模板参数时使用表示法,但对于一般函数来说,使用专门化而不是重载往往并不重要 我只是阅读了标准中的内容,实际上可以提供一个显式的专门化,但是它必须在类定义之外。例如:
#include <iostream>
struct foo
{
template <typename T> void operator()(T const&) {
std::cout << "general\n";
}
};
template <>
void foo::operator()<int>(int const&) {
std::cout << "int spec\n";
}
int main()
{
foo f;
f(1.2);
f(1);
f<double>(1); // <-- ERROR: doesn't work!
}
#包括
结构foo
{
模板无效运算符()(T常量&){
当你说“规范”时,你的意思是“专业化”吗?我认为[这个问题/答案][1]可能回答了你想要做的事情。[1]:什么是ResultType
?它应该是模板参数之一吗?这两个声明具体发生在哪里?正如消息所示,不允许在类定义中专门化函数。@如果您的专门化与您试图专门化的模板不匹配,那么它必须与之匹配。您有uns对于大小
参数,使用长
代替大小
;对于最差距离
使用浮点
代替结果类型
。