我希望能够从类中返回一个函数,这样就不需要通过返回类型进行if-else操作。
我有一个返回多个字符串的类。相反,我想返回多个函数。
#include <iostream>
class Handler
{
private:
public:
int handleMessage(int code)
{
return code+1;
}
};
void func1();
void func2();
void func3();
int main (int argc, char *argv[])
{
Handler handle;
int code = handle.handleMessage(0);
if(code == 1)
{
func1();
}
return 0;
}
void func1(){ std::cout << "1" << std::endl;}
void func2(){ std::cout << "2" << std::endl;}
void func3(){ std::cout << "3" << std::endl;}
Run Code Online (Sandbox Code Playgroud)
我想要的是:handleMessage类中的函数Handler返回某些内容,因此在我的主应用程序中,我不必使用if-else。
所以主要看起来像这样:
function = handle.handleMessage(0);
Run Code Online (Sandbox Code Playgroud)
应用程序将选择它将运行的功能。例如:
function = handle.handleMessage(0); //will …Run Code Online (Sandbox Code Playgroud) 我试图在不使用typedef的情况下返回指向函数的指针,但是编译器(gcc)发出了一个奇怪的错误,好像我无法进行那种设置.
备注:使用typedef代码工作.
码:
void catch_and_return(void (*pf)(char*, char*, int&), char *name_one, char* name_two, int& number)(char*, char *, int&)
{
pf(name_one, name_two, number);
return pf;
}
Run Code Online (Sandbox Code Playgroud)
错误:
'catch_and_return'声明为返回函数的函数
你能解释一下为什么编译器不允许我这样做吗?谢谢!
好吧,我认为标题足够描述(但令人困惑,抱歉).
我正在读这个库:Timer1.
在头文件中有一个指向函数的公共成员指针,如下所示:
class TimerOne
{
public:
void (*isrCallback)();
};
Run Code Online (Sandbox Code Playgroud)
存在TimerOne类的实例化对象,称为"Timer1".
Timer1调用该函数如下:
Timer1.isrCallback();
Run Code Online (Sandbox Code Playgroud)
这怎么回事?我熟悉通过使用dereference运算符通过函数指针调用函数.
例如:
(*myFunc)();
Run Code Online (Sandbox Code Playgroud)
所以我希望通过对象的上述调用更像是:
(*Timer1.isrCallback)();
Run Code Online (Sandbox Code Playgroud)
那么,通过函数指针调用函数的可接受选项是什么,作为独立的函数指针和对象的成员?
我是C++的新手,我想做以下但无法弄清楚如何.
我想基于带有一些参数的模板定义一个函数.比方说,我们有f(x)=a*x+b,但参数a和b将作为参数传递.
我想定义一个函数create_function(double a, double b),返回a*x+b与a和b评估,无论参数传递,这样我可以用另一个函数func( double x )来评价它.
目标是使用给定的参数创建一次函数,然后可以由另一个例程重复调用它f(x).真正的功能比这复杂得多,但我能够适应它.
我一直在看这篇文章,它会与此类似,但我不知道如何使它适应返回仍然依赖的函数x.
typedef int (*identity_t)(int);
identity_t retFun() {
return [](int x) { return x; };
}
Run Code Online (Sandbox Code Playgroud)
这段代码有效,但为什么我需要第一行呢?
为什么下面的代码不起作用?
int (*)(int) retFun() {
return [](int x) { return x; };
}
Run Code Online (Sandbox Code Playgroud)