Определить анонимную структуру в вызове функции - PullRequest
0 голосов
/ 30 ноября 2018

Я уже могу сделать это:

struct {
    uint64 _i;
    bool operator()(uint64 elem)
    {
        const uint64 i = _i++; return elem & i; // Just an example
    }
} filter;

// Templated function
Array<uint64> clone = Containers::filter(array, filter);

Я хотел бы знать, возможно ли переместить определение структуры прямо в вызов функции, чтобы я мог, например, определить макрос, подобный этому:

Array<uint64> clone = Containers::filter(array, ENUMERATE(i, elem, elem & i)); // Same as above

Когда я пытаюсь это сделать, я получаю expected primary-expression before 'struct':

Array<uint64> clone = Containers::filter(array, struct {
    uint64 _i;
    bool operator()(uint64 elem)
    {
        const uint64 i = _i++; return elem & i;
    }
});

1 Ответ

0 голосов
/ 30 ноября 2018

Ваши требования могут быть удовлетворены с помощью изменяемой лямбды с изменяемым состоянием:

Array<uint64> clone = Containers::filter(
    array,
    [_i = uint64{0}](uint64 elem) mutable -> bool {
        const uint64 i = _i++;
        return elem & i;
    }
);
...