Можно ли указать функцию непосредственно в объявлении структуры в C ++? - PullRequest
5 голосов
/ 03 августа 2011

Например:

struct Foo
{
    int bar;
    int (*baz)(int);
};

int testFunc(int x)
{
    return x;
}

Foo list[] = {
    { 0, &testFunc },
    { 1, 0 } // no func for this.
};

В этом примере я бы лучше поместил функцию непосредственно в инициализатор list [], а не использовал указатель на функцию, объявленную в другом месте; он хранит соответствующий код / ​​данные в одном месте.

Есть ли способ сделать это? Я пробовал каждый синтаксис, который только мог придумать, и не смог заставить его работать.

Ответы [ 3 ]

4 голосов
/ 03 августа 2011

Если вы имеете в виду что-то вроде:

Foo list[] = {
    { 0, int (*)(int x) { return x;} },
    { 1, 0 } // no func for this.
};

, то нет, это невозможно.Вы говорите о анонимных функциях , которые C ++ еще не поддерживает (по состоянию на август 2011 г.).

C ++ 0x добавляет поддержку лямбда-функций , что в значительной степени одно и то же, и ваш синтаксис, вероятно, будет выглядеть примерно так:

Foo list[] = {
    { 0, [](int x) { return x; } },
    { 1, 0                       }
};

Однако, если вы намереваетесь просто хранить код и данные в непосредственной близости, то просто держите их в непосредственной близости(тот же исходный файл C с кодом, непосредственно предшествующим данным).

0 голосов
/ 03 августа 2011

То, что вы ищете, это анонимные функции , которых нет в C или C ++ (хотя Clang поддерживает это неофициально и будет добавлено в C ++ 0x.)

0 голосов
/ 03 августа 2011

В C ++ 0x вы можете использовать лямбда-выражения для хранения данных и кода вместе, но это затруднит чтение и обслуживание кода.

...