尝试将函数从类传递到可变参数模板函数
Trying to pass a function from a class to a variadic template function
所以我有一个小组项目,它正在比较各种排序函数的排序时间。我正在尝试通过使用可变参数模板函数来减少复制/粘贴代码的数量。我已经阅读了我在谷歌上可以找到的关于它们以及如何将函数作为参数传递的所有内容。从字面上看,已经为此工作了几天,我似乎无法完成这项工作。我已经能够在类之外传递在我的主 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中。
- C++ gmock - 我们如何在单元测试 cpp 文件中读取/获取 cpp 文件函数的参数值
- 访问函数变体时"Invalid conversion"错误
- 创建函数变体向量时"No matching function for call"错误
- 如何使用 SFINAE 来防止模板函数变窄?
- 如何在 c++ 中将 1 个函数变量值发送到另一个函数
- C++记录每个函数和参数值
- 谷歌模拟函数改变参数值
- 将函数形参的实参解包到c++模板类
- 函数对象应该是函数实参还是它的引用?
- 如何传递操作符作为默认函函数实参
- c++ const函数形参.有没有一种方法可以只声明函数的单个签名?
- Const正确性- Const指针作为函数实参
- 关于将指向数组的指针作为函数形参的混淆
- 将非const引用使用auto-keyword声明的lambda作为实参传递给std::函数形参类型
- 通过函数实参而不是模板形参获取元组的元素
- 在函数实参中使用模板形参不适用gcc4.8
- 作为函数形参传递的Vector初始化器列表
- 指向函数形参的指针vs函数形参
- 在模板化类和函数上下文中以默认值作为函数形参的函子:-)
- 带std::函数形参的重载操作符