【发布时间】:2020-02-18 14:06:06
【问题描述】:
我试图测试一些简单的 C 风格的排序函数。在驱动程序中,我写了这样的东西:
int main()
{
std::array<int, 8> A = { 1, 0, 4, 5, 7, 2, 9, 3 };
auto lambda = [&A](const std::function<void(int *A, int n)> &sorting_alg) {
int n = A.size();
sorting_alg(A.data(), n);
std::cout << "=> ";
print(A.data(), n);
std::cout << std::endl;
};
auto do_bubble_sort = std::bind(lambda, bubble_sort);
auto do_selection_sort = std::bind(lambda, selection_sort);
auto do_insertion_sort = std::bind(lambda, insertion_sort);
std::cout << "Bubble Sort :" << std::endl;
do_bubble_sort();
std::cout << "Selection Sort :" << std::endl;
do_selection_sort();
std::cout << "Insertion Sort :" << std::endl;
do_insertion_sort();
return 0;
}
我有绑定代码,我可以将 A 传递给它以复制,但它将我的 lambda 限制为 size=8,这是我想避免的。是否可以在不使用 std::vector 之类的东西的情况下实现这一目标?
一旦我将A 的捕获方法更改为值捕获,它就不再编译了。我想使用数组的副本来测试所有排序功能。为什么我不能按值捕获std::array?为什么尺寸推断适用于参考案例?
【问题讨论】:
-
OT:为什么不简单地
std::function<void(int*, int)>?std::function<void(int *A, int n)>中的A和n的目的是什么? -
你是对的!我只是出于懒惰而复制了签名。:)