首页 > 解决方案 > 尝试将函数从类传递给可变参数模板函数

问题描述

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

我的团队要求我放弃这个想法(我们的时间不多了),但我觉得我离实现它很近了。如果有人可以帮助解决语法问题,我将不胜感激。我还尝试使用函数库中的函数类型,这是半工作的唯一方法。我确实在堆栈溢出时发现了这个问题,并且这个人在使用“&”时遇到了同样的错误,但我似乎仍然无法完成这项工作。

编辑 根据评论,我试图使代码尽可能基本和简洁。:) 我花了比我应该花更多的时间试图找到我已经开始工作的功能,但我没有保存它的副本。我读到我应该包含允许其他人复制错误的代码,但我无法重新创建它。在这一点上,我能做的最好的就是一个假设的例子。假设我在一个名为 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 次。如果有人可以提供指导,我将向您发送网络脚吻。谢谢!

标签: c++classparametersformattingvariadic-templates

解决方案


由于您的问题包含更多代码,所以我想筛选一下,我将给您举个例子,说明如何将函数传递给模板。

#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 中。


推荐阅读