如何将 lambda 函数的 return 传递给 C++ 中的另一个函数?

How can I pass the return of a lambda function to another function in C++?

我有一个外部函数定义为 extern "C" int64_t ASMFunction(int64_t sort);

然后我有一个这样定义的 C++ 函数:

template <typename T>
void results(T&& sort) {
    ASMFunction([&](int64_t sort[60]) {for (int i = 0; i < sizeof(sort); i++) {
        sort[i] = rand() % 9223372036854775807;
    };
    return sort; }
    );
}

我在模板下定义它的原因是否则我会得到编译器错误no suitable conversion function from "lambda []int64_t *(int64_t *sort)->int64_t *" to "int64_t" exists。否则,我什至没有单独的函数来调用我的外部 ASMFunction,而只是在 main() 中调用。这样,我得到了编译器错误 Error C2664 'int64_t ASMFunction(int64_t)': cannot convert argument 1 from 'main::<lambda_2b1e6f6fde7359a6cb4cb68639dfae02>' to 'int64_t'。如何使用 C++ Lambda 函数生成随机整数数组作为另一个函数的参数?

您正在尝试生成一个数字列表,但您的 ASMFunction 只得到一个。

如果你想要一个列表,你可以这样做:

int64_t ASMFunction(int64_t * sort)
{
    std::cout << "Num: " << sort[1] << endl;
    return 0;
}

template <typename T, const int64_t N>
void results(T (&sort)[N]) {
    ASMFunction([&]() {for (int64_t i = 0; i < N; i++) {
                sort[i] = rand() % 9223372036854775807;
            };
            return sort;
                }()  // <- note you are calling the function to generate the list
        );
}

int main() {
    int64_t i[10];
    
    results(i);
    
    return 0;
}

如果你只想要一个号码:

int64_t ASMFunction(int64_t sort)
{
    std::cout << "Num: " << sort << endl;
    return 0;
}

template <typename T, const int64_t N>
void results(T (&sort)[N]) {
    ASMFunction([&]() { return rand() % 9223372036854775807; }() );
}

int main() {
    int64_t i[10];
    
    results(i);
    
    return 0;
}

typename T 是类型,在本例中 int64_tconst int64_t N 是为了能够由模板推导出数组大小。 每个数组大小都会有一个新的模板实例。