최근에이 문제가 발생하여이를 해결할 수있었습니다. 일부 Java 코드 (안드로이드 SDK에서 액세스 할 수있는 물건)를 실행해야하는 C++ Qt Android 프로젝트가 있습니다. 이를 위해 자바와 C++ 코드 사이에서 상수를 공유해야했습니다 (서로 이야기하고 서로 이해하도록하기 위해). (자바는 C++을 호출하는 경우, 또는 주위 방향)에 따라 생성 된 Java 오브젝트에 상수 값을 전달 ++
에 의해 두 곳의 변수 .... 나쁜 생각과
직접 사용 선언 파일 ('포함')를 가지고 유지하기 위해 하드를 선언합니다. 아이디어는 Java 파일을 C++과 Java에서 모두 사용하는 것입니다 (이 방법은 주위에서 작동 할 수 있지만 C++ 사용자이므로이 방법이 더 쉬워 보입니다). 그리고 우리는이 java 파일을 헤더 파일로 C++에 포함되도록 유효하게하기 위해 프리 프로세서를 사용합니다! package name1.name2.name3;
import java.lang.String;
class MyConstants
{
public static String THE_NAME() { return "Name"; }
public static Integer THE_VALUE() { return 12; }
};
이
변수에 액세스하는 자바 코드에서 문제없이 사용할 수있다 : 여기서 자바 파일 (constants.java) 상수 (정수 및 문자열)를 선언의 일례이다. 지금, 여기에 C에서 ++ 파일을 포함하는 방법은 다음과 같습니다 #include <string>
using namespace std;
#define public public:
#define package struct mockup1 { int name3; };struct mockup2 { mockup1 name2; };int i1 =
#define name1 mockup2()
#define import struct mockup3 { int String; };struct mockup4 { mockup3 lang; };int i2 =
#define java mockup4()
#define String string
#define Integer int
#include "constants.java"
#undef public
#undef String
#undef package
#undef import
#undef java
#undef name3
사전 프로세서는이 유효한 C++ 헤더 파일에 constants.java 파일을 (주 difficuly 패키지 및 수입 라인의 탐을 얻을 수 있었다 변경 당신 때문에 매크로 이름에 도트를 사용할 수 없습니다.) :
struct mockup1 { int name3; };struct mockup2 { mockup1 name2; };int i1 = mockup2().name2.name3;
struct mockup3 { int String; };struct mockup4 { mockup3 lang; };int i2 = mockup4().lang.String;
class MyConstants
{
public: static string THE_NAME() { return "Name"; }
public: static int THE_VALUE() { return 12; }
};
여기에 C++로 상수가 있습니다!
int main()
{
cout << MyConstants::THE_NAME() << MyConstants::THE_VALUE() << endl;
return 0;
}