728x90
반응형
이번 포스팅에서는 C++클래스의 메모리 주소를 생성해두었던 클래스로 변환하는 방법에 대해 설명하겠습니다.
먼저 C++ 클래스의 주소는 this 키워드를 통해 가져올 수 있습니다.
class Sample{
public:
int a;
int b;
long get_addr(){
return (long)this;
}
};
위 Sample 이라는 클래스 내의 get_addr()함수가 클래스 주소를 리턴해 주는 함수 입니다. retrun this를 통해 클래스 주소를 리턴해줄 수 있고 저는 주소값을 long형으로 받기 위해 this 앞에 long을 붙혀주었습니다.
이렇게 받아온 주소를 다시 클래스로 만들어 보겠습니다.
long get_class(){
Sample *sample = new Sample();
sample->a = 3;
return sample->get_addr();
}
void changeaddr2class(){
long addr;
addr = get_class();
Sample *sample = reinterpret_cast<Sample *>(addr);
cout << sample->a << endl; // 3
}
먼저 get_class()함수에서 Sample 클래스를 하나 만들고 주소값을 리턴합니다. changeaddr2class함수에서는 이 주소 값을 받을 addr변수를 따로 지정해주었습니다. 단순 숫자값인 addr을 클래스 주소로서 사용하여 get_class()함수에서 만든 sample 클래스에 접근하려면 reinterpret_cast 를 이용하면 됩니다!
실제로 changeaddr2class() 함수에서 sample의 클래스 변수인 a 접근해 보면 get_class()함수에서 초기화 시켰던 3이 출력되는 것을 확인할 수 있습니다!
728x90
반응형
'Etc' 카테고리의 다른 글
sd-x2-latent-upscaler 모델로 image upscale 하기 (2) | 2024.11.21 |
---|---|
safetensor 모델을 diffusers에서 사용 가능하게 변경하기 (0) | 2024.11.11 |
[JNI] jbyte를 C++의 vector<uchar>로 변환하는 방법 (0) | 2023.03.12 |
[JNI] JNI 사용법 및 튜토리얼 (2) (0) | 2023.03.12 |
[JNI] JNI 사용법 및 튜토리얼 (1) (3) | 2023.03.11 |