c++ - 在函数调用中定义一个匿名结构

标签 c++ function struct parameters anonymous-struct

我已经可以做到了:

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

最佳答案

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

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

关于c++ - 在函数调用中定义一个匿名结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53554465/

相关文章:

c++ - 两个字符串 XYZ 和 XZY

C 库查找两个数组之间的差异

c# - 具有自动实现属性和构造函数初始值设定项的结构

c - 传递参数 1 of 'strcmp' 错误/预期 'const' char *' but argument is of type ' int'

c++ - boost shared_ptr 和 'this'

C++ ASCII 游戏控制台屏幕闪烁

c++ - 如何使用动态调整大小的字符串数组?

c++ - 在 C++ 中处理图像和像素值时遇到问题

c++ - 我将 vector 作为 double 传递给函数,但 Visual Studio 将其称为 unsigned int

c++ - 字符串结构体和字符串数组一样吗?