C ++创建一个被指向为参数的函数

时间:2014-10-09 05:44:20

标签: c++ function pointers

所以这很难解释,但我会尽我所能。

我有一个函数,我的类之一将函数指针作为参数,我想要做的是将函数定义为参数的一部分。即:

object->setFunctionPointer({string a = ""; return a;});

这可能吗?如果是这样,这个的正确语法是什么?

4 个答案:

答案 0 :(得分:2)

在C ++ 11中,你可以做到。您可以使用C ++ lambda(匿名函数)。

请参阅http://ideone.com/8ZTWSU

上的示例代码
#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。