所以这很难解释,但我会尽我所能。
我有一个函数,我的类之一将函数指针作为参数,我想要做的是将函数定义为参数的一部分。即:
object->setFunctionPointer({string a = ""; return a;});
这可能吗?如果是这样,这个的正确语法是什么?
答案 0 :(得分:2)
在C ++ 11中,你可以做到。您可以使用C ++ lambda(匿名函数)。
上的示例代码#include <iostream>
using namespace std;
typedef const char * (*funcptr)();
funcptr s;
void setFuncPtr(funcptr t)
{
s = t;
}
int main() {
// your code goes here
setFuncPtr([]{return "Hello \n"; });
printf("%s\n", s());
return 0;
}
答案 1 :(得分:0)
如果您的函数是类的成员,则不能使用普通函数指针来存储其地址。你需要的是代表;这是方法的专用函数指针。在互联网上搜索C ++委托,你应该找到很多例子。
(注意:静态方法可能有例外;我不记得了。)
答案 2 :(得分:0)
如果我们谈论的是C ++,你应该使用std :: function而不是函数指针。除非您与C API接口。
class Foo{
SetFunc(std::function<void(int)> func)
{
m_func = func;
}
private:
std::function<void(int)> m_func;
};
答案 3 :(得分:0)
这是一个完整的例子。从c ++ 11开始,这是可行的方法:
#include<functional>
#include<string>
#include<iostream>
using namespace std;
class Object
{
public:
void setFunctionPointer(function<string(void)> function)
{
m_function = function;
}
string run()
{
return m_function();
}
private:
function<string(void)> m_function;
};
int main(int argc, char**argv)
{
Object *object = new Object;
object->setFunctionPointer([]{string a = "FOO"; return a;}); // here is the function assignment
cout << object->run() << endl;
delete object;
}
运行时,会将FOO
打印到stdout。