是否可以回调模板类的成员?

时间:2019-02-19 13:40:44

标签: c++ templates callback

是否可以如上所述回调模板类的成员?我的意思是,我有一些模板类,还有另一个(非模板)类的定义对象。该对象具有另一个成员函数。我想从该成员函数调用模板类的成员函数。可行吗?

2 个答案:

答案 0 :(得分:3)

这就是我对问题的理解。名为“ some_class”(MyAlgorithm)的类应该具有对模板(AlgorithmConsumer)的引用。由于“ some_class”仅需要一种方法,因此最简单的方法是将引用传递给函数,如下所示:

#include <iostream>
#include <functional>


class MyAlgorithm
{
    std::function<void()> prepare;
public:
    explicit MyAlgorithm(std::function<void()> prepare)
        : prepare{prepare}
    {}

    void do_something()
    {
        if (prepare)
        {
            prepare();
        }

        std::cout << "I did something\n";
    }
};

template<typename T>
class AlgorithmConsumer
{
    MyAlgorithm algorithm;
public:
    AlgorithmConsumer()
        : algorithm([this](){prepare();})
    {}

    void prepare()
    {
        std::cout << "Preparing...\n";
    }

    void execute()
    {
        algorithm.do_something();
    }
};

int main()
{
    AlgorithmConsumer<int> ac;
    ac.execute();
    return 0;
}

希望,这可以解决您的问题。

答案 1 :(得分:2)

这是不使用nobrl : Do not send byte range lock requests to the server. This is necessary for certain applications that break with cifs style mandatory byte range locks (and most cifs servers do not yet support requesting advisory byte range locks).

的一种方法
std::function