一个人怎么能做到这一点?我需要继承,因为会有很多子类(它们在“打印机”函数中会有所不同),但是"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“不能”在基中声明,因为子类中将有许多不同的打印机(具有相同的返回类型和参数),但是每个子类的打印机数量和名称不同
发布于 2021-03-27 19:19:31
尝试从基类调用子类的方法会变得很麻烦。记住,指向成员函数的指针只能使用该类的实例("this")调用。
典型的解决方案是有一个单独的打印机基类,其中包含一个虚拟的print方法。然后有一个printer1和printer2派生类集。更多的是打字。
这是一个坚实的案例,其中一个蓝宝石将是非常有效的。
只要对代码做一些小的调整,它就会变得非常容易。注意,我们现在向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();
}https://stackoverflow.com/questions/66835050
复制相似问题