0

我已经可以这样做了:

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;
    }
});
4

1 回答 1

3

有状态的、可变的 lambda 可以满足您的要求:

Array<uint64> clone = Containers::filter(
    array,
    [_i = uint64{0}](uint64 elem) mutable -> bool {
        const uint64 i = _i++;
        return elem & i;
    }
);
于 2018-11-30T09:57:14.250 回答