尝试将函数从类传递到可变参数模板函数

Trying to pass a function from a class to a variadic template function

本文关键字:函数 变参 参数      更新时间:2023-10-16

所以我有一个小组项目,它正在比较各种排序函数的排序时间。我正在尝试通过使用可变参数模板函数来减少复制/粘贴代码的数量。我已经阅读了我在谷歌上可以找到的关于它们以及如何将函数作为参数传递的所有内容。从字面上看,已经为此工作了几天,我似乎无法完成这项工作。我已经能够在类之外传递在我的主 cpp 文件中定义的函数,但我无法让它适用于属于类的函数。

我的小组要求我放弃这个想法(我们的时间不多了(,但我觉得我离实现它很近了。如果有人能帮忙解决语法问题,我将不胜感激。我还尝试使用函数库中的函数类型,这是半工作的唯一方法。我确实在堆栈溢出上发现了这个问题,并且这家伙在使用"&"时遇到了同样的错误,但我似乎仍然无法做到这一点。

编辑根据注释,我试图使代码尽可能基本和简洁。 :) 我花了比我应该花更多的时间来试图找到我已经开始工作的功能,但我没有保存它的副本。我读到我应该包含允许其他人复制错误的代码,但我无法重新创建它。在这一点上,我能做的最好的事情就是一个假设的例子。 假设我在一个名为 Sorts 的类中有一个名为 Sorts 的函数:

void Sorts::InsertionSort(vector<int> &v_small, int length)
{
//does the thing that sorts the stuff
cout << "display the sorted stuff" << endl
}

以及名为 Data 的类中的向量:

class Data{
public
vector<int> dataSmall;
};

这两者都在单独的头文件中。为简单起见,我们将其称为"标头"。 :)

run_timer(InsertionSort, vector_to_sort, size_of_vector);

在我的 cpp 文件中,我还有一个函数(正在尝试(采用函数参数、矢量参数和大小参数。

template <class Ret, class... Args> class function<Ret(Args...)>
run_timer3(function<void(Args...)> sort_func(int), vector<int>& array, int size...)
{
//start the timer
//call function to time, sort_func sometimes has 3 parameters though
sort_func(array, size);
//stop the timer
//calculate and write to file
}

我知道我应该能够通过通用示例来解决这个问题,但老实说,它不会计算。我所需要的只是知道如何传递类中存在的函数。虽然现在我失去了正常工作的函数,但也许我也需要一些帮助来定义函数。:(

这可能是我在可变参数模板上找到的最有用的页面。

抱歉,如果这与我之前链接的相似,但我真的不明白我做错了什么。我真的不想将相同的代码块与不同的变量使用 162 次。如果有人可以提供指导,我会向您发送网络脚吻。谢谢!

由于您的问题包含更多代码,因此我想筛选一下,因此我仅为您提供一个有关如何将函数传递给模板的示例。

#include <iostream>
template <typename F>
void foo(F f) {
f();
}
struct bar {
void print() {
std::cout << "barn";
}
void baz() {
foo([&]() { print(); });
}
};
void print() {
std::cout << "freen";
}
int main () {
foo(print);
bar b;
b.baz();
foo([&]() { b.print(); });
}

可以简单地传入一个自由函数。如果你想传递一个成员函数,你可以把它包装在一个lambda中。