이 솔루션은 C와 C에서 다른 ++, 또한 다른 11 C++ 및 사전 C의 +에서 +11. 이 모든에서
, 당신은 함수 포인터의 간단한 배열을 가질 수
double (*array[3])() = { &f1, &f2, &f3 };
함수를 호출하려면 :
std::cout << (*array[i])() << std::endl;
는 것을 의미하기 때문에 이것은 매우 제한되어있다 질문의 기능은 다른 데이터에 의존 할 수 없습니다. 이러한 이유로, 가 만드는 C에서 보통이다 struct
:
struct F
{
double (*pf)(void*);
void* data;
};
F array[3] = { { &f1, NULL }, { &f2, someData }, { &f3, NULL } };
std::cout << (*array[i].pf)(&data) << std::endl;
은 (그러나, 특히이 잔인한 수치 계산의 경우, 많은 그것은 대부분 콜백에 의해이 사용되는되는 . .)
C에서
++, 당신은 또한 다양한 파생 클래스의 인스턴스에 대한 포인터를 (이 각 파생 클래스에서 재정의 될 것이다) 가상 함수와 추상 기본 클래스를 정의하고 저장하는 옵션이 있습니다
class F
{
public:
virtual ~F() {}
virtual double operator()() const = 0;
};
F const* array[3] = { &obj1, &obj2, &obj3 };
std::cout<< (*array[i])() << std::endl;
마지막으로 C++ 11에는 모든 것을 캡슐화하는 표준 객체 std::function
이 있습니다. (당신은 그러나. 대부분의 사람들처럼, 나는 아직 완전히 C++ 11을 지원하는 컴파일러에 액세스 할 수없는, 직접이를 조회 할 것이다, 그래서 연습 없었습니다이.)
C 또는 중 하나를 결정할주세요 C++ – fuz