2013-05-27 5 views
0

이것은 내 문제에 대한 최상의 해결책이 아니므로 원하는 것을 설명 할 것입니다.클래스의 멤버 함수를 포인터로 전달

다른 클래스 (자바를 보는 인터페이스)의 일반 버전 인 함수를 만들고 싶습니다. 그리고 나서 각 클래스의 특성화를 만듭니다.

나중에 일반 클래스의 벡터를 만들고 싶지만 벡터의 각 멤버는 reallity에 각 특수 클래스의 캐스팅 된 멤버가 있습니다. 그래서 벡터에서 각 클래스의 함수를 호출하면 다른 함수를 호출합니다.

나는 inherence 만 사용하여이 작업을 수행했지만, 벡터의 기능을 호출 할 때는 전문화가 아니라 아버지의 구현을 호출합니다.

올바른 기능을 호출하기 위해 벡터의 각 구성원을 캐스팅하지 않으려 고합니다. 코드의 문제를 일반화하기위한 것이기 때문에 저는 이것을 사용하지 않습니다. 나는 역동적 인 행동을 취하는 것을 의미합니다.

또한 포인터를 사용하여 tryied 했으므로 특수 클래스는이 함수를 호출 할 함수 포인터에 할당합니다. 그러나 포인터가 namespace::classgeneralization::(int)(*f)();이고 가리 키려는 기능이 namespace::classgeneralization::classspecialization::int f()();이므로 컴파일되지 않으므로 허용되지 않았습니다.

나는 클래스에서 함수를 구현 한 다음 클래스에서 그 함수를 가리킬 수도 있지만, 이것은 실제로 생각할 수있는 코드입니다. 또한 lamda 함수에 대한 포인터를 사용할 수 있는지 알아보기 위해 노력했지만 적어도 VS2010에서 연구 할 수는 없습니다.

어쩌면 문제를 해결하기위한 구멍의 관점이 잘못되었을 수 있으며, 내가 시도하는 것처럼 제대로 제대로 수행 할 수있는 방법이 없을 수도 있습니다. 어쨌든 나는 다른 시각에 개방되어 있으므로, 각 요소가 다른 구현 클래스와 다른 클래스 인 벡터의 클래스를 구현하는 것은 오래 전부터였다.

+0

당신의 설명을 읽고, 당신이 (http://stackoverflow.com/questions/274626/ 약 [객체 슬라이스]를 읽을해야한다고 생각 문제는 무엇인지 - 문제 -에 - c). –

+1

또한 ['std :: function'] (http://en.cppreference.com/w/cpp/utility/functional/function)에 대한 정보가 유용 할 수 있습니다. VS2010에서 완전히 지원되는지 확신 할 수 없지만. –

+0

나는 왜 질문이 다운 그레이드되었는지 알고 싶습니다. 만약 내가 가난한 영어 때문에 유감 스럽지만 원어민 영어가 아닌 사람들에게 부당하다고 느낀다. – user223506

답변

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 
+0

나는 포인터를 만들지 않고 이런 식으로하려고 노력했다. 포인터없이이 동작을 수행 할 수 있습니까? 객체에 대한 포인터가 아니라 객체를 선언 할 수 있습니까? – user223506

+0

아니요, Joachim Pileborg가 질문에 언급 한대로 std :: vector 을 사용하면 조각이 나옵니다. 자세한 내용은 요아힘 스 링크를 참조하십시오. 또한 C++에서 값, 참조 및 포인터에 대한 더 많은 통찰력을 얻을 것을 권고합니다. – tarjeik

관련 문제