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

时间:2019-12-06 08:20:20

标签: c++ class parameters formatting variadic-templates

因此,我有一个小组项目正在比较各种排序功能的排序时间。我试图通过使用可变参数模板函数减少复制/粘贴代码的数量。我已经阅读了所有可以在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次。如果有人可以提供指导,我会向您发送网络脚步。谢谢!

1 个答案:

答案 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中。