C++/JNI 大括号括起来的初始化程序映射 (Android NDK)

标签 c++ dictionary android-ndk java-native-interface list-initialization

我有一个用 C++ 编写的引擎,用于与 AndroidStudio 中的 JNI 集成。 我阅读并遵循我找到的所有教程。

在 Cpp 文件中有 header 的导入,其中包括 2 个像这样初始化的大括号括起来的映射(仅作为示例):

第一个是用 2500 行初始化的... 第二个是这样的:

std::map <StateEnum, std::string> StateToString = {
  { state_one, "State 1" },
  { state_two, "State 2" },
  { state_three, "State 3" },
  { state_four, "State 4" }
};

应用程序.mk

APP_ABI     := all
APP_STL     := stlport_static
APP_CFLAGS  := -std=c++11 -fPIC

这里是错误:

jni/My_header.h:line: error: could not convert '{{state_one, "State 1"}, {state_two, "State 2"}..} from '< brace-enclosed initializer list>' to 'std::map< StateEnum, std::string>'

我还尝试将 C++ 文件编译为库,然后将其集成到我的 Android 项目中。结果是一样的。

任何人都可以帮助我。我不想将 2500 行 map 初始化(使用 map.add(...))翻译成 5000 行。

最佳答案

STLport 实现已过时且不支持 C++11(尤其是大括号初始值设定项)。您应该切换到 GNU libstdc++ 或 LLVM libc++ 实现以使其工作:

APP_STL := gnustl_static # GNU libstdc++
# Or:
APP_STL := c++_static    # LLVM libc++

关于C++/JNI 大括号括起来的初始化程序映射 (Android NDK),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31427318/

相关文章:

android ndk没有制定目标的规则

android - 如何在 Android 应用程序中嵌入 C 程序

c++ - 为什么不能 move 这些变量?

c++ - 无法编译旧的 WIN32 WINAPI 程序

c++ - 游戏开发逻辑(获取区域单位)

python - 按键值过滤字典列表 - 将答案作为字典列表返回

安卓NDK : keeping alive C++ objects

c++ - OpenCV 和虚拟 C++ : save Frame data from Camera and then save to Jpg

c# 保存要查找的值列表的最佳类

c++ - map 比较构造函数参数