c++ - 如何在c ++中将函数作为参数传递?
问题描述
我有这个文件 Matrix.h:
#ifndef MTM_MATRIX_H_
#define MTM_MATRIX_H_
#include <assert.h>
namespace mtm
{
template<class T>
class Matrix
{
T** data;
int col;
int row;
public:
Matrix(int row,int col, T intial=0);
T& operator()(int row, int col);
const T& operator() (int row, int col) const;
//some functions
template<typename Function>
Matrix<T> apply(Function function);
};
//ctor
template<class T>
Matrix<T>::Matrix(int row,int col, T intial):data(new T*[row]), col(col), row(row)
{
for (int i = 0; i < row; i++)
{
data[i] = new T[col];
}
for(int i=0;i<row;i++)
{
for(int j=0;j<col;j++)
{
data[i][j]=intial;
}
}
}
template<class T>
T& Matrix<T>::operator()(int row, int col)
{
return this->data[row][col];
}
template<class T>
const T& Matrix<T>::operator() (int row, int col) const
{
return this->data[row][col];
}
template<class T>
template<typename Function>
Matrix<T> Matrix<T>::apply(Function function)
{
Matrix<T> new_mat(this->row,this->col);
for(int i=0;i<new_mat.row;i++)
{
for(int j=0;j<new_mat.col; j++)
{
new_mat(i,j)= function(this->data[i][j]);
}
}
return new_mat;
}
}
#endif
我编辑了代码,现在我对同一个函数有不同的错误apply(Function function)
ps:如果需要更多关于我的课程的信息,请在评论中告诉我,不要只是关闭我的问题,而不要求我先编辑它..
错误:
test_partB.cpp: In function ‘int main()’:
test_partB.cpp:54:58: error: no matching function for call to ‘mtm::Matrix<int>::apply(Square) const’
const mtm::Matrix<int> mat_2=mat_1.apply(Square());
^
test_partB.cpp:54:58: note: candidate is:
In file included from test_partB.cpp:3:0:
Matrix.h:593:11: note: mtm::Matrix<T> mtm::Matrix<T>::apply(Function) [with Function = Square; T = int] <near match>
Matrix<T> Matrix<T>::apply(Function function)
^
Matrix.h:593:11: note: no known conversion for implicit ‘this’ parameter from ‘const mtm::Matrix<int>*’ to ‘mtm::Matrix<int>*’
使用该功能的代码:
//this is **
const mtm::Matrix<int> mat_1(1,2,4);
const mtm::Matrix<int> mat_2=mat_1.apply(Square());
问题是我不能改变**
class Square {
public:
int operator()(int val){
return val*val;
}
};
解决方案
解决方案是像这样在类中声明函数
template<typename Function>
Matrix<T> apply(Function function);
然后编写它的主体并以这种方式使用它:
template<class T>
template<typename Function>
Matrix<T> Matrix<T>::apply(Function function)
{
int k=3;
int n=function(k);
}
推荐阅读
- authentication - gRPC 的基于令牌的身份验证是否会为每个调用添加元数据?
- redis - [ApacheBeam RedisIO]:过期时间不适用于 PFADD 写入方法
- python - if __name__ == "__main__": 和 Python 中的递归
- node.js - 用 NODE.js 在变量上多次替换字符串
- c++ - Poco::Foundation Target Not found with conan
- plsql - 无法在 SQL Developer 中运行教程过程:PLS-00103:遇到符号
- java - java - 如何在java中排除百分之五的数字
- python - modbus poll 跳转到异常只有没有错误?
- javascript - 如何限制反应原生谷歌地方自动完成到一个特定的大陆
- android - Android Studio 中 Firebase Crashlytics 的 mappingFileUploadEnabled 是否默认设置为 false?