gpt4 book ai didi

c++仿函数和函数模板

转载 作者:IT老高 更新时间:2023-10-28 22:23:50 26 4
gpt4 key购买 nike

考虑一下这个简单而毫无意义的代码。

#include <iostream>

struct A {
template<int N>
void test() {
std::cout << N << std::endl;
}
};

int main() {
A a;
a.test<1>();
}

这是一个非常简单的函数模板示例。但是,如果我想用重载的 operator() 替换 A::test 以使其成为仿函数怎么办?

#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。

最佳答案

你只能打电话

a.operator()<1>();

但这不会使用仿函数。 Functor 需要一个非模板 operator(),因为它们必须能够以 varname() 的形式调用,而这不适用于您的代码。

要使其成为真正的仿函数,请将您的代码更改为模板类(仿函数是类):

#include <iostream>

template<int N>
struct A {
void operator()() {
std::cout << N << std::endl;
}
};

int main() {
A<1> a;
a();
}

关于c++仿函数和函数模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/942170/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com