如何将 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_t
和 const int64_t N
是为了能够由模板推导出数组大小。
每个数组大小都会有一个新的模板实例。
我有一个外部函数定义为
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_t
和 const int64_t N
是为了能够由模板推导出数组大小。
每个数组大小都会有一个新的模板实例。