因此,我有一个小组项目正在比较各种排序功能的排序时间。我试图通过使用可变参数模板函数减少复制/粘贴代码的数量。我已经阅读了所有可以在Google上找到的有关它们以及如何将函数作为参数传递的内容。从字面上看这是几天的工作,我似乎无法使这项工作。我已经能够在类之外传递在主cpp文件中定义的函数,但是我无法使其对属于类的函数起作用。
我的小组要求我放弃这个想法(我们的时间已经用完了),但是我觉得我已经很接近实现它了。如果有人可以提供语法帮助,我将非常感激。我还尝试使用功能库中的功能类型,这是半可行的唯一方法。我确实在堆栈溢出上发现了this问题,那个家伙遇到了与使用'&'有关的错误,但是我似乎仍然无法使它工作。
编辑 根据评论,我尝试使代码尽可能基本和简洁。 :) 我花了更多的时间来寻找自己必须使用的功能,但是我没有保存它的副本。我读到我应该包含允许其他人重复该错误的代码,但是我无法重新创建它。此时,我能做的最好的就是一个假设的例子。 可以说我在名为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文件中还有一个函数(正在尝试)采用一个函数参数,一个矢量参数和一个size参数。
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
}
我知道我应该能够通过通用示例弄清楚这一点,但是老实说它不能计算。我所需要的就是知道如何传递类中存在的函数。尽管现在我失去了正在运行的功能,但也许我也需要一些帮助来定义功能。 :(
This可能是我在可变参数模板上发现的最有用的页面。
很抱歉,如果这与我之前链接的内容相似,但是我真的不明白我在做什么错。我真的不想拥有具有不同变量的相同代码块162次。如果有人可以提供指导,我会向您发送网络脚步。谢谢!
答案 0 :(得分:1)
由于您的问题包含更多的代码,因此我想进行筛查,我仅举一个示例,说明如何将函数传递给模板。
#include <iostream>
template <typename F>
void foo(F f) {
f();
}
struct bar {
void print() {
std::cout << "bar\n";
}
void baz() {
foo([&]() { print(); });
}
};
void print() {
std::cout << "free\n";
}
int main () {
foo(print);
bar b;
b.baz();
foo([&]() { b.print(); });
}
可以简单地传入一个自由函数。如果要传递成员函数,可以将其包装在lambda中。