由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - 问一个函数指针的问题,c++
相关主题
BigEndian和LittleEndian的设计关于传递函数指针
出个题考考大家:)c的函数指针能不能弄得像matlab的function handle一样?
求助,如何才能将一个c++对象封装成一个函数指针。有什么编辑器查看函数指针比较给力?
[合集] C问题求助:如何强行从外部访问local static variable?python下的expect
C++ most vexing parse到底怎么回事?Static variables in function
node.js里调用了callback之后,还会回到函数里。func调用结束时出错
请教一个程序调用的内存问题 (转载)请问一下Matlab GUI 里面 调用目录下一个network.mat的问题
请问c++里empty class的问题python decorator 调用问题
相关话题的讨论汇总
话题: double话题: 函数指针话题: 函数话题: func
进入Programming版参与讨论
1 (共1页)
l********a
发帖数: 1154
1
函数指针一直没有搞太懂,先描述下需求:
我想用遗传算法解一个问题,现在大体部分完成了,算法也能跑,计算得出结果也正确.整
个算法是编译为dll供其他程序调用
目前设置的算法有个objectiveFun(string funName)函数,根据输入字符串来决定调用
哪个目标函数,(因为边写边测试,用的最简单的函数f(x)=x_1+x_2,测试,但是真正计算
的时候,目标函数很复杂的),
double objectiveFun(string funName)
{
if (0==funName.compare("test"))
{ return testFun(x); }
else if (0==funName.compare("run"))
{ return run(x); }
}
现在我想把这个GA算法做成一个通用的,所以准备将objectiveFun改写,如果可以接受一
个函数指针,这样编程的时候就不用写死了,运行时没法修改.想弄成动态改变的,不知道
可不可行?因为我没有深入看过函数指针,不知道这个路走不走的通?多谢.
t****t
发帖数: 6806
2
yes you can, as long as all the functions have the same signature. in your
case, looks like you input a double (?) and output a double.

【在 l********a 的大作中提到】
: 函数指针一直没有搞太懂,先描述下需求:
: 我想用遗传算法解一个问题,现在大体部分完成了,算法也能跑,计算得出结果也正确.整
: 个算法是编译为dll供其他程序调用
: 目前设置的算法有个objectiveFun(string funName)函数,根据输入字符串来决定调用
: 哪个目标函数,(因为边写边测试,用的最简单的函数f(x)=x_1+x_2,测试,但是真正计算
: 的时候,目标函数很复杂的),
: double objectiveFun(string funName)
: {
: if (0==funName.compare("test"))
: { return testFun(x); }

c******e
发帖数: 545
3
像这样?
double objectFunc(double (*p_func)(double)) {
if(p_func) {
return p_func(x);
} else {
//do whatever you want
}
}

【在 l********a 的大作中提到】
: 函数指针一直没有搞太懂,先描述下需求:
: 我想用遗传算法解一个问题,现在大体部分完成了,算法也能跑,计算得出结果也正确.整
: 个算法是编译为dll供其他程序调用
: 目前设置的算法有个objectiveFun(string funName)函数,根据输入字符串来决定调用
: 哪个目标函数,(因为边写边测试,用的最简单的函数f(x)=x_1+x_2,测试,但是真正计算
: 的时候,目标函数很复杂的),
: double objectiveFun(string funName)
: {
: if (0==funName.compare("test"))
: { return testFun(x); }

f*******n
发帖数: 12623
4
In C++, you might want to use function pointers or function objects. The
most general is to make a template function that can accept any callable
type:
template
double objectFunc(F func) {
return func(x);
}
l********a
发帖数: 1154
5
我接受一个double arr[],经过运算,输出一个double,是objective function的值.
多谢几位.
fakeshawn朋友回复的这个模板我没大看明白
这样输入,c++会认为func是个函数吗?如果这个函数不存在呢?
调用的办法是: double obj = objectFunc(testObjFunc);
这样对吗?如果已经有一个函数定义为 double testObjFunc(...);
可是x[]参数怎么传递进去?
b***i
发帖数: 3043
6
先不讲template, 你可以定义你的函数指针,和map<函数名字,函数指针>
typedef double (*pFun)(double*);
map > funmap;
在你的统一调度的函数中
pFun p = funmap["name"];
double rc=(*p)(x);

【在 l********a 的大作中提到】
: 我接受一个double arr[],经过运算,输出一个double,是objective function的值.
: 多谢几位.
: fakeshawn朋友回复的这个模板我没大看明白
: 这样输入,c++会认为func是个函数吗?如果这个函数不存在呢?
: 调用的办法是: double obj = objectFunc(testObjFunc);
: 这样对吗?如果已经有一个函数定义为 double testObjFunc(...);
: 可是x[]参数怎么传递进去?

l********a
发帖数: 1154
7
非常感谢,用map将string和函数指针对应起来的确是我最想实现的东西.之前对函数指
针不大理解.看看好点儿了.现在去写代码测试,如果map["key"]返回NULL就是该字符串
对应的函数没有定义吧

【在 b***i 的大作中提到】
: 先不讲template, 你可以定义你的函数指针,和map<函数名字,函数指针>
: typedef double (*pFun)(double*);
: map > funmap;
: 在你的统一调度的函数中
: pFun p = funmap["name"];
: double rc=(*p)(x);

t****t
发帖数: 6806
8
try use map.find(key)==map.end() for query existence.

【在 l********a 的大作中提到】
: 非常感谢,用map将string和函数指针对应起来的确是我最想实现的东西.之前对函数指
: 针不大理解.看看好点儿了.现在去写代码测试,如果map["key"]返回NULL就是该字符串
: 对应的函数没有定义吧

l********a
发帖数: 1154
9
多谢,我目前程序中有一个map 的判断用的全是
if (map["key"].empty())...
请问这样判断得到的value的结果和直接find(key)哪个更好一点?或者说更标准些?

【在 t****t 的大作中提到】
: try use map.find(key)==map.end() for query existence.
t****t
发帖数: 6806
10
map[key] always create key first if not exist. so you can never check
existence. you can only check the validity of value.

【在 l********a 的大作中提到】
: 多谢,我目前程序中有一个map 的判断用的全是
: if (map["key"].empty())...
: 请问这样判断得到的value的结果和直接find(key)哪个更好一点?或者说更标准些?

1 (共1页)
进入Programming版参与讨论
相关主题
python decorator 调用问题C++ most vexing parse到底怎么回事?
auto_ptr, algorithm 混用问题,大侠们救我。头疼死了!node.js里调用了callback之后,还会回到函数里。
C里, 如何快速的对一个数组清0请教一个程序调用的内存问题 (转载)
也问个二维数组的函数传递问题请问c++里empty class的问题
BigEndian和LittleEndian的设计关于传递函数指针
出个题考考大家:)c的函数指针能不能弄得像matlab的function handle一样?
求助,如何才能将一个c++对象封装成一个函数指针。有什么编辑器查看函数指针比较给力?
[合集] C问题求助:如何强行从外部访问local static variable?python下的expect
相关话题的讨论汇总
话题: double话题: 函数指针话题: 函数话题: func