c++中的嵌套函数

Nested functions in C++

本文关键字:函数 嵌套 c++      更新时间:2023-10-16

我希望在c++中使用嵌套函数,以避免全局变量。我找到了一种方法,通过使用类(http://www.gotw.ca/gotw/058.htm)。我试图实施那个解决方案,但我失败了。下面是我的代码:

class Myclass 
{
    double (*retval)(double, double);
double A;
double x0, y0, z0, z, a, b,k;
int mu, nu, s, t;
double g(double x, double y)
{
    return (x0+y0+z0+a+b+k+s+t+mu+nu)*A*x*y;
}
public :
Myclass(complex<double> A, double x0, double y0, double z0, double k, double a, double b,  int mu, int nu, int s, int t) : z(0.)
{
    this->A=A;
    this->x0=x0;
    this->y0=y0;
    this->z0=z0;
    this->k=k;
    this->a=a;
    this->b=b;
    this->mu=mu;
    this->nu=nu;
    this->s=s;
    this->t=t;
    retval=g;
}
operator double (double, double)
{
    return retval;
}
};
int main ()
{
    /*
    ....
   */
    return 0;
}

目标是返回一个原型为double (double, double)的函数,该函数将被其他指令使用。

我得到了这个错误消息:

g++    -c -g -MMD -MP -MF "build/Debug/GNU-Linux-x86/main.o.d" -o build/Debug/GNU-Linux-x86/main.o main.cpp
main.cpp:114:36: error: ‘Myclass::operator double(double, double)’ must take ‘void’ operator double (double, double)
                                    ^
main.cpp: In constructor ‘Myclass::My_class(std::complex<double>, double, double, double, double, double, double, int, int, int, int)’:
main.cpp:112:15: error: cannot convert ‘Myclass::g’ from type ‘double (champ_speculaire_class::)(double, double)’ to type ‘double (*)(double, double)’ retval=g;
                 ^
目标是返回一个原型为double (double, double)的函数
operator double (double, double)

声明转换操作符不是返回函数的函数。

返回一个函数,因为你用c++11标记了你的问题,我建议使用std::function:

std::function<double(double, double)> get() const
{
    return retval;
}

返回一个指向double(double, double)函数的函数指针的语法如下:

double (*get())(double, double) const
{
    return retval;
}