将类的成员函数作为指针传递

时间:2013-05-27 08:34:59

标签: c++ visual-studio-2010 visual-c++

这可能不是我问题的最佳解决方案,所以我会解释我想要做什么。

我想创建一个函数,它是其他类的通用版本(以java方式查看它的接口)。然后创建每个类的专业化。

后来我想创建泛型类的向量,但向量的每个成员都是每个专用类的成员。所以当我在向量中调用每个类的函数时,调用一个不同的函数。

我尝试使用仅仅是固有的做法但是,当我调用向量函数调用父的实现而不是它的专门化。

我不想将向量的每个成员转换为调用正确的函数,因为这样做的目的是概括代码中的问题。我的意思是做一个动态的行为。

我也尝试使用指针,因此专门的类将它的函数分配给一个函数指针,该指针将被调用。但是这是不允许的,因为指针是namespace::classgeneralization::(int)(*f)();而我想要指向的函数是namespace::classgeneralization::classspecialization::int f()();所以它不能编译。

我可以从类中实现该函数,然后将其指向类中,但这实际上是我认为的模拟代码。我还试着看看我是否可以使用指向lamda函数的指针,但至少在VS2010中这是不可能的,因为我可以研究。

也许解决这个问题的漏洞观点是错误的,并且有一种方法可以正确地做到这一点,并且在我尝试的时候减少模仿。在任何情况下,我都对其他观点持开放态度,所以我实现了一个类向量,每个元素都是一个不同的类,具有不同的函数实现。

1 个答案:

答案 0 :(得分:1)

理解你的问题有点困难,但我觉得你试图以一种非常繁琐的方式实现多态。也许以下代码有帮助:

#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