微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将成员函数向量传递给基类函数

如何解决将成员函数向量传递给基类函数

如何做到这一点?我需要继承,因为会有很多子类(它们在“打印机”功能上会有所不同)但是“creator_function”对它们来说都是一样的,并且子功能继承的功能比这个有问题的功能更多。

我不知道 ??

  1. creator_function 的头部
  2. 调用传递的函数
  3. 函数传递给creator_function
    class Base
    {
    public:
        void creator_function(vector< ?(int)functions_p(int)? > printers)
        {
           for(int i; i<printers.size(); i++)
           {
              ?int val = printers[i](10*i);?
              /* create some result here from val of all printers */
           }
        }
    };

    class Child : Base
    {
    public:
        int printer1(int x){ return x; }
        int printer2(int y){ return 2*y; }

        void create_result()
        {
            ? creator_function( {printer1,printer2} ); ?
        }
    };

Child c;
c->create_result();

我迷失在继承的成员函数指针中。

printer1 和printer2“不能”在Base 中声明 因为子类中会有很多不同的打印机(具有相同的返回类型和参数),但是不同数量的打印机和不同的名称在子类中每个子类

解决方法

试图从基类调用子类的方法会变得很混乱。请记住,指向成员函数的指针只能用该类的实例(“this”)调用。

经典的解决方案是有一个单独的打印机基类,上面有一个虚拟的 print 方法。然后有一组 printer1printer2 派生类。打字要多得多。

这是 lambda 非常有效的可靠案例。

对您的代码进行一些细微的调整,它变得非常容易。请注意,我们现在向 creator_function 传递了一个对向量的 const 引用。这使我们能够将 lambda 直接内联到 Child 类的函数调用中。

#include <iostream>
#include <vector>
#include <functional>

using namespace std;

class Base
{
public:

    typedef std::function<int(int)> pfunc;

    void creator_function(const std::vector<pfunc>& printers)
    {
        for (size_t i=0; i < printers.size(); i++)
        {
            int val = printers[i](10 * i);
        }
    }
};

class Child : Base
{
public:
    int printer1(int x) { return x; }
    int printer2(int y) { return 2 * y; }

    void create_result()
    {
        creator_function({
                             [this](int x) {return printer1(x); },[this](int y) {return printer2(y); }
                         });
    }
};

int main()
{
    Child c;
    c.create_result();
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。