将成员函数的向量传递给 Base class 函数
Pass vector of memeber functions to Base class function
如何做到这一点?我需要继承,因为会有很多 Child classes(它们在“打印机”功能上会有所不同)但是“creator_function”对它们都是相同的 Child 函数继承了比这个有问题的函数更多的特性。
我不知道 ??
中的零件
- Header 共 creator_function
- 调用传递函数
- 传递函数给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 中声明,因为在 Child classes 中会有很多不同的打印机(具有相同的 return 类型和参数),但每个 Child class
中的打印机数量和名称不同
尝试从基础 class 调用子 class 的方法会变得混乱。请记住,指向成员函数的指针只能用 class.
的实例(“this”)调用
classic 解决方案是使用一个单独的打印机基础 class,上面有一个虚拟 print
方法。然后有一组 printer1
和 printer2
派生的 classes。需要输入更多内容。
这是 lambda 非常有效的可靠案例。
只要对您的代码进行一些小的调整,就会变得非常容易。请注意,我们现在正在向 creator_function
传递一个 const 对向量的引用。这使我们能够将 lambda 表达式直接内联到 Child class.
的函数调用中
#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();
}
如何做到这一点?我需要继承,因为会有很多 Child classes(它们在“打印机”功能上会有所不同)但是“creator_function”对它们都是相同的 Child 函数继承了比这个有问题的函数更多的特性。
我不知道 ??
中的零件- Header 共 creator_function
- 调用传递函数
- 传递函数给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 中声明,因为在 Child classes 中会有很多不同的打印机(具有相同的 return 类型和参数),但每个 Child class
中的打印机数量和名称不同尝试从基础 class 调用子 class 的方法会变得混乱。请记住,指向成员函数的指针只能用 class.
的实例(“this”)调用classic 解决方案是使用一个单独的打印机基础 class,上面有一个虚拟 print
方法。然后有一组 printer1
和 printer2
派生的 classes。需要输入更多内容。
这是 lambda 非常有效的可靠案例。
只要对您的代码进行一些小的调整,就会变得非常容易。请注意,我们现在正在向 creator_function
传递一个 const 对向量的引用。这使我们能够将 lambda 表达式直接内联到 Child class.
#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();
}