저는 점프 프로세스를 시뮬레이션하기 위해 C 프로그램을 작성하고 있습니다. 어떤 경우에는 각기 다른 점 사이의 점프 율은 평가 점을 이동시켜 공통 함수로 계산하기 쉽습니다. 그래서 주어진 함수 포인터를 가져 와서 원래 함수의 이동 된 버전을 나타내는 함수 포인터를 할당하고 할당하고 싶습니다.C는 평가 점을 이동하여 함수의 복사본을 생성합니다.
한 시간 동안 온라인 검색을 한 후에도 해결책을 찾지 못했지만이 사실은 전통적인 C의 범주에 실제로 해당되지 않는다고 확신합니다. 원본을 가져 오는 다른 접근 방식에 대한 해결 방법이나 아이디어가있는 사람이 있습니까? 함수 및 이동 된 버전에 대한 액세스 권한이 있습니까? 문제를 해결하는 C 방법을 보여 @MSalters의 제안의 구현 : 최소한의 예를 아래
는 녹색 테스트 :#include "gtest/gtest.h"
int f(int x) {
return x;
}
void get_shifted_funtion(int (*pOriginalFunction)(int), int (*pShiftedFunction)(int), int shift) {
???
}
TEST(FunctionTest, GenerateAShiftedVersionOfAGivenFunction) {
int (*fp)(int);
int (*sfp)(int);
fp = f;
int shift = 2;
int test_value = 0;
get_shifted_funtion(fp, sfp, shift);
EXPECT_EQ(fp(test_value+shift), sfp(test_value));
}
편집을 얻기 위해 초대 느낌. 이것을 개선하기위한 제안에 대해 듣고 기쁘게 생각합니다.
typedef struct STATEFUL_FUNCTION {
int (*fp) (int);
int shift;
} stateful_function;
int evaluate(STATEFUL_FUNCTION func, int input) {
return func.fp(input + func.shift);
}
int test_function(int x) {
return x;
}
TEST(FunctionTest, GenerateAShiftedVersionOfAGivenFunction) {
int test_input = 0;
int shift = 2;
STATEFUL_FUNCTION sf = {test_function, shift};
EXPECT_EQ(test_function(test_input+shift), evaluate(sf, test_input));
}
약간의 자체 생성 문제입니다. 점프 프로세스를 설명하는 구조를 설계했습니다. 점프 프로세스는 일련의 반응을 보유하고 각 반응은이 반응의 현재 속도를 계산하는 함수 포인터를 보유합니다. 이제 내가 배우고 싶은 특정 점프 프로세스의 경우,이 함수가 단일 함수와 상태 종속 교대를 따르므로 모든 함수를 명시 적으로 언급하는 것을 피하고 싶습니다. –
하지만이 막 다른 골목은 사용자 친화적이지 않은 점프 프로세스 구조를 설계하기위한 표시 일 뿐이며 다시 생각해 볼 것입니다. –