将类的成员函数作为指针传递
Passing a member function of a class as pointer
这可能不是我问题的最佳解决方案,所以我将解释我要做什么。
我想创建一个函数,它是其他类的通用版本(在java中看到它的接口方式)。然后创建每个类的专门化。
稍后,我想创建泛型类的vector,但vector的每个成员实际上是每个特化类的强制转换成员。因此,当我调用向量中每个类的函数时,调用不同的函数。
我试图只使用继承来做到这一点,但是,当我调用vector的函数时,调用父类的实现,而不是它的专门化。
我不想强制转换vector的每个成员来调用正确的函数,因为这样做的缺点是泛化代码中的问题。我的意思是创造一个动态行为。
我还尝试使用指针,因此专门化类将其函数分配给将被调用的函数指针。但这是不允许的,因为指针是namespace::classgeneralization::(int)(*f)();
,而我想要指向的函数是namespace::classgeneralization::classspecialization::int f()();
,所以它不会编译。
我可以在类之外实现函数,然后在类中指向它,但我认为这确实是混淆代码。我也试着看看我是否可以使用一个指向lambda函数的指针,但这是不可能的,至少在VS2010中,我可以研究。
也许解决问题的孔视角是错误的,有一种方法可以正确地做到这一点,并且在我尝试时减少干扰。在任何情况下,我都对其他观点持开放态度,只要我实现一个类向量,其中每个元素都是具有不同功能实现的不同类。
理解您的问题有点困难,但听起来您试图以一种非常繁琐的方式实现多态性。下面的代码可能会有所帮助:
#include <iostream>
#include <vector>
class MyInterface
{
public:
virtual void f() { std::cout << "MyInterface::f() called" << std::endl; }
};
class A : public MyInterface
{
public:
virtual void f() { std::cout << "A::f() called" << std::endl; }
};
class B : public MyInterface
{
};
int main()
{
std::vector<MyInterface*> objects;
objects.push_back(new A);
objects.push_back(new B);
objects[0]->f();
objects[1]->f();
return 0;
}
这将输出:
A::f() called
MyInterface::f() called
相关文章:
- 如何正确编写指针函数声明?
- C++常规指针函数或模板
- 如何重新定义 C++ 指针函数?
- C++ 指向其他类函数的指针函数
- 指针到指针函数参数
- 将指向成员的指针函数传递到模板中
- C++ 在 none 常量指针函数中返回一个常量指针
- 如何使用指针函数编写/读取数组
- 是C 中的函数指针函数对象
- 如何从另一个类调用指向成员的指针函数
- 如何声明采用指向成员的指针函数的函数
- 如何构造一个以可变参数指针函数作为成员的类?
- c 通过值或指针函数语法
- 将typedef方法作为指针函数传递
- 从 Main 中的双指针函数打印出指针数组
- strcpy 对指针函数的引用
- 这是否仍然声明一种指针函数的别名?
- 将指向成员的指针函数与 std::shared_ptr 结合使用
- 'Incomplete type' 为标准::函数声明指向成员的指针函数模板参数时出错
- 从注入进程的 DLL 调用函数并更改指针函数的地址