operator()模板专业化

Ran*_*ori 5 c++ templates

我正在尝试对模板运算符进行专门化,模板看起来像这样:

 template <typename Iterator1, typename Iterator2>
ResultType operator()(Iterator1 a, Iterator2 b, size_t size, ResultType worst_dist = -1) const
Run Code Online (Sandbox Code Playgroud)

在我完成了这样的专业化之后:

template <>
float operator()<float*,float*>(float* a, float const* b, unsigned long size, float worst_dist = -1) const
Run Code Online (Sandbox Code Playgroud)

我在编译期间遇到错误:

无法在类范围内专门化一个函数'operator()'

所有这些功能都在struct模板中

我很乐意得到一些帮助.谢谢.

Die*_*ühl 10

你为什么要专门研究这个运营商呢?您将无法使用依赖于特化的语法(即显式提供[某些]模板参数)来调用它!只是使用重载,你应该没事.尽管有时需要或者甚至需要使用显式指定模板参数的符号,但对于通常使用特化而不是重载的函数来说,它往往并不重要.

我只是在标准中读取内容,实际上可以提供显式的特化,但它必须在类定义之外.例如:

#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!
}
Run Code Online (Sandbox Code Playgroud)

使用重载会有同样的效果.但是,使用显式指定的模板参数仍然不起作用.