동일한 서명이지만 클래스가 다른 멤버 함수에 함수 배열을 만들려고합니다. (그러나 그들은 유전된다). 이런 식으로 시도한 이유는 무엇이며 어떻게 작동하지 않는지 이해하지만 어떻게 해결할 수 있습니까? 예를 들어 함수가 다른 클래스의 경우 객체에 존재하지 않는다면 (그 클래스가 다른 경우) 신경 쓸 것입니다.기본 클래스의 일반 멤버 함수 배열
class Base
{
public:
virtual void BaseFunc();
};
class X : Base
{
public:
void XFunc();
};
class Y : Base
{
public:
void YFunc();
};
int main()
{
std::vector<std::function<void(Base*)>> v;
v.push_back(&Base::BaseFunc); //OK
v.push_back(&X::XFunc); //NOT OK
v.push_back(&Y::YFunc); //NOT OK
}
나는 또한 그 클래스의 멤버 함수에 대한 포인터가있는 템플릿 클래스를 가진 후 나는 그 클래스에서 부를 것이다,하지만 난 템플릿 인수를 포기하지 않고 템플릿 클래스의 배열을 가질 수 없습니다 시도
(클래스가 단순하고 크기가 템플릿 인수에 의존하지 않더라도). 또한 그냥 배열 void 포인터가 데 노력했다 그러나 void 포인터 포인터가 구성원 함수 포인터를 캐스팅 불가능하다는 것을 알게되었습니다. (가능한 경우 알려주 수 있습니다.)
편집 : 내 의도에 대해 몇 가지 배경을 제공하기 위해 여기에 내 의견을 붙여 넣습니다 : 내 생각은 사용자가 기본 클래스를 상속 한 클래스의 함수를 구현 한 다음 이러한 클래스를 내 클래스에 전달하여 배열에 저장할 수있게하는 것입니다. 지정된 조건에 따라 호출합니다.
편집 2 : 나는 C에있는 솔루션이 필요 ++ (11) 또는 C++ (14)
이 XFunc'과'YFunc' '로서 작동 할 수없는 것은 기지국에 알려져 있지 않다 :
결과 객체 적당한
std::function
객체를 통해 호출되어야한다 : 즉, 작성하는 직진되어야 즉, 'Base'에 대한 포인터로 호출 할 수 없습니다. 기본 클래스에서 (순수한) 가상으로 만들어야합니다. –제 아이디어는 사용자가 기본 클래스를 상속 한 클래스에서 함수를 구현 한 다음이 클래스에 함수를 전달하여 배열에 저장하고 지정된 특정 조건에서 함수를 호출 할 수있게하는 것입니다. –
그러면'std :: vector, std :: function , std :: function >'과 같은 것이 필요할 것입니다. 어쩌면 교과서를 열고 상속이 어떻게 작동하는지 검토 할 수 있습니다. –