将函数指针传递给函数,c++
Passing Function Pointers to Functions, c++
我正试图让一个函数通过指针调用另一个函数,我已经浏览了一些帖子,并尝试过这样做,但我一直收到错误。打印是我想要应用程序调用的函数。Apply应在调用print时打印所有数据。
我得到错误:变量具有不兼容的类型void
void print(double x) //function I want to pass
{
cout << x << endl;
}
void apply(vector<double> data, void (*f)(double))
{ //function with pointer to other function print
for(int i = 0; i< data.sizeof(); i++)
f(data[i]);
}
我建议对std::function进行钳制,或者对这样的工作使用和自动:
void apply(const vector<double>& data, std::function<void(double)> f)
{ //function with pointer to other function print
for(size_t i = 0; i< data.size(); i++)
f(data[i]);
}
或
void apply(const vector<double>& data, auto f)
{ //function with pointer to other function print
for(size_t i = 0; i< data.size(); i++)
f(data[i]);
}
使用auto将取决于编译器,因为这种用法只有在c++14标准之后才可用。
它应该与下面的整个代码一起工作:
#include <iostream>
#include <vector>
using namespace std;
void print(double x) //function I want to pass
{
cout << x << endl;
}
void apply(const vector<double>& data, void (*f)(double))
{ //function with pointer to other function print
for(size_t i = 0; i< data.size(); i++)
f(data[i]);
}
void test()
{
vector<double> data;
data.push_back(1.0);
data.push_back(2.0);
data.push_back(3.0);
apply(data, print);
}
您想要类似以下内容:
void apply(const vector<double>& data, void (*f)(double) ) {
for( int i=0; i<data.size(); ++i )
f(data[i]);
}
我不知道错误是什么。你的代码似乎可以工作(C++11):
#include <iostream>
#include <vector>
using namespace std;
void print(double x) //function I want to pass
{
cout << x << endl;
}
void apply(const vector<double>& data, void (*f)(double)) { //function with pointer to other function print
for (size_t i = 0; i < data.size(); i++)
f(data[i]);
}
int main() {
vector<double> v{1.1, 2.2, 3.3, 4.4, 5.5, 6.6, 7.7, 8.8, 9.9};
apply(v, print);
return 0;
}
结果:
1.1
2.2
3.3
4.4
5.5
6.6
7.7
8.8
9.9
RUN FINISHED; exit value 0; real time: 0ms; user: 0ms; system: 0ms
我唯一做的改变是:
- 将
data.sizeof()
更改为data.size()
,但我想您已经知道了(vector
没有名为sizeof()
的公共成员函数) - 这不是使其工作所必需的,但却是一种良好的做法:
apply
的第一个参数(通常)最好声明为const vector<double>& data
。也就是说,您传递一个对不会被修改的数据类型/结构的引用(对于预期更高效的内存消耗对象)
相关文章:
- "error: no matching function for call to"构造函数错误
- 什么时候调用组成单元对象的析构函数
- 继承函数的重载解析
- 为什么随机数生成器不在void函数中随机化数字,而在main函数中随机化
- C++模板来检查友元函数的存在
- 递归函数计算序列中的平方和(并输出过程)
- 对RValue对象调用的LValue ref限定成员函数
- C++17复制构造函数,在std::unordereded_map上进行深度复制
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 在C++STL中是否有Polyval(Matlab函数)等价物?
- 为什么使用 "this" 指针调用派生成员函数?
- 将对象数组的引用传递给函数
- 函数调用中参数的顺序重要吗
- 函数向量_指针有不同的原型,我可以构建一个吗
- 使用不带参数的函数访问结构元素
- 代码在main()中运行,但在函数中出现错误
- 内置函数可查看CPP中的成员变量
- 如何获取std::result_of函数的返回类型
- 如何在c++中为模板函数实例创建快捷方式
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗