如何将已实现的虚拟成员函数作为参数传递
How to pass an implemented virtual member function as a parameter
#include <iostream>
class virtualClass{
public:
virtual int a() = 0;
};
class UnknownImplementation : public virtualClass{
public:
int a() override { return 1;}
};
class myFramework {
public:
int c(int (virtualClass::*implementedFunc)(void)){
implementedFunc();
return 2;
}
};
int main(){
//some user implements the virtual class and calls myFramework function
myFramework* mfp = new myFramework();
std::cout << mfp->c(&(UnknownImplementation::a)) << std::endl;
}
嗨,我正在研究一个框架,该框架应该调用已实现的虚拟函数并使用它。它类似于上面的代码。 我得到的编译错误是:
testVirtual.cpp:在成员函数 'int myFramework::c(int (virtualClass::((((': testVirtual.cpp:16:19: error: 必须使用 '.'或 "->"在"实现的 Func (...("中调用指向成员的指针函数, 例如,"(... ->实现的 Func( (...(' 实现 Func((; ^ testVirtual.cpp: 在函数 'int main((' 中: testVirtual.cpp:24:47: error: 无效使用非静态成员 函数 'virtual int UnknownImplementation::a((' std::cout <<mfp->c(&(UnknownImplementation::a(( <<std::endl;
如何解决这些问题? 提前感谢!
传递已实现类的实例并调用函数有效。
为了构建sameerkn的注释,这段代码应该是:
#include <iostream>
class virtualClass{
public:
virtual int a() = 0;
};
class mySubclass : public virtualClass{
public:
int a() override { return 1;}
};
int main(){
mySubclass * x= new mySubclass ();
// ...
std::cout << x->a () << std::endl;
}
这里的重点是,您可以传递类型virtualClass
的对象(或指针( - 即使它们实际上可能是现实生活中mySubclass
的对象 - 并且仍然以正确的a()
实现结束。myFramework
是完全没有必要的。
这就是virtual
方法的用途 -virtualClass
的消费者不需要了解任何可能 - 现在或将来 - 从中派生的类,如果我正确阅读了您的问题,这就是您想要的。
相关文章:
- 如何在C++中将迭代器作为函数参数传递
- 为什么我不能将引用作为 std::async 的函数参数传递
- 节点插件 API 将数组作为函数参数传递
- 将字符串数组作为函数参数传递
- 如何通过 C++ 中的函数参数传递初始值设定项列表的固定大小的初始值设定项列表?
- 我可以动态创建新地图并作为函数参数传递吗?
- 将任意模板向量作为函数参数C++传递
- 将函数指针作为函数参数传递的目的
- C++:通过函数参数传递的值给出不同的结果
- 当数组大小在C++中未知时,如何在运行时将对字符串数组的引用作为函数参数传递?
- 通过宏将函数参数传递给函数
- C++:访问作为函数参数传递的双指针数组所指向的变量的值
- 如何将 std::string 作为构造函数参数传递,并将其保存的 C 字符串存储在 void 指针中?
- 将派生类构造函数参数传递给受保护的成员
- 将指向数组的指针作为函数参数传递,这本身就是另一个函数的返回值?
- 如何将二维数组类型字符(字符串)作为函数参数传递?
- 有什么理由C++ 11+ std::mutex 应该声明为全局变量,而不是作为函数参数传递到 std::thread 中
- 如何将派生类作为函数参数传递:如果派生类成员不在父类中怎么办
- 如何将变量作为构造函数参数或函数参数传递
- 当数组对象以函数参数传递时,为什么复制构造函数会自称