Вложенные альтернативы функций в C ++ - PullRequest
2 голосов
/ 29 июля 2011

Я хочу создать функцию f (), которая использует три значения для вычисления своего результата: a, b и e. e зависит от a и b, поэтому технически f () является функцией только a и b. Но для удобства чтения проще взглянуть на функцию, содержащую абстракцию e, чем на более сложную формулу, содержащую множество a и b.

Есть ли способ использовать зависимые переменные, такие как e, без использования вложенных функций, которые C ++ не позволяет?

Ответы [ 6 ]

4 голосов
/ 29 июля 2011

C ++ имеет локальные переменные, что облегчает это:

double f(double const a, double const b)
{
    double const e = a * b + b * b * b;
    return a + b + e;
}
2 голосов
/ 29 июля 2011

Не уверен, что я понимаю ваш вопрос, но если вы просто пытаетесь сделать вашу функцию более читабельной, вводя зависимую переменную, почему бы просто не вычислить эту переменную в отдельной функции, вызываемой вашей основной функцией:

float CalculateE(float a, float b)
{
    return (a + b);
}

float f(float a, float b)
{
    float e = CalculateE(a, b);
    return a + b + e;
}
2 голосов
/ 29 июля 2011

Вы можете написать локальную структуру, которая может определять статическую функцию, которая может использоваться, как если бы ее вложенная функция была:

int f(int a, int b)
{
   struct local
   {
        static int f(int a, int b, int e)
        {
             return e * (a + b);
        }
   };
   return local::f(a,b, a*b);
}
1 голос
/ 29 июля 2011

Вы можете сделать это:

int f(int a, int b)
{
    struct LocalFunc
    {
        int operator()(int a, int b)
        {
            return a*b + b*b*b;
        }
    };
    LocalFunc e;
    return e(a,b)*a+b;
}
1 голос
/ 29 июля 2011

Что не так с:

int compute_e(int a, int b)
{
    return whatever;
}

int func(int a, int b)
{
    int e = compute_e(a, b);
}
0 голосов
/ 29 июля 2011

Я думаю, что вы можете написать несколько заметок.

int FuncSum(int a, int b)
{
    //return the sum of a + b
    return a + b ;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...