考虑一下这个简单而毫无意义的代码。
#include <iostream>
struct A {
template<int N>
void test() {
std::cout << N << std::endl;
}
};
int main() {
A a;
a.test<1>();
}
这是一个非常简单的函数模板示例。但是,如果我想A::test
用重载替换operator()
它以使其成为仿函数怎么办?
#include <iostream>
struct A {
template<int N>
void operator()() {
std::cout << N << std::endl;
}
};
int main() {
A a;
a<1>(); // <-- error, how do I do this?
}
当然如果operator()
取了依赖于模板的参数,编译器就有可能推导出模板。但我只是想不出用无参数仿函数指定模板参数的正确语法。
有没有合适的方法来做到这一点?
显然,这段代码可以工作,因为它绕过了仿函数语法:
a.operator()<1>();
但这有点违背了它成为函子的目的:-P。