Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 运算符()模板专门化_C++_Templates - Fatal编程技术网

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对于
大小
参数,使用长
代替
大小
;对于
最差距离
使用
浮点
代替
结果类型