0

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

我想创建一个函数,它是其他类的通用版本(Java 中的接口)。然后创建每个类的专业化。

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

我尝试仅使用继承来做到这一点,但是,当我调用向量的函数时,调用父亲的实现而不是它的专业化。

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

我还尝试使用指针,以便专门的类将其函数分配给将要调用的函数指针。但这是不允许的,因为指针是namespace::classgeneralization::(int)(*f)();并且我要指向的函数是namespace::classgeneralization::classspecialization::int f()();所以它不能编译。

我可以在类外实现该功能,然后将其指向类中,但我认为这确实是滥用代码。我还尝试查看是否可以使用指向 lamda 函数的指针,但这至少在 VS2010 中是不可能的,因为我可以研究。

也许解决问题的洞见是错误的,并且有一种方法可以正确地做到这一点,而且我正在尝试减少滥用。无论如何,我对其他观点持开放态度,只要我获得一个类向量,其中每个元素都是具有不同功能实现的不同类。

4

1 回答 1

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
于 2013-05-27T09:02:45.827 回答