JNI/NDK開発C/C++典型的基礎知識点


1.ダイナミックパンツ導入
// path   :          so ,            (      data/data/    )。
System.load(path);
//path      lib   so 。
System.loadLibrary(path);

2.c言語ではメソッドはリロードできません.c++ではメソッドはリロードできます.
3.JNIEnvオブジェクト
JNIEnv: c       (        ), c++     (        )。
 JNIEnv            。

4.javaクラスのメソッド/属性の署名を取得する
  java     /     
javap -s xxx.class
android studio   cd  
build/intermediates/classes/… 
or
build/intermediates/javac/debug/compileDebugJavaWithJavac/classes...

5.constキーワード定義値が一定でない
const int a;
int const a;
          a       。
const int *a;
int * const a;
        。
   *a   ,      ,   a   ,     (     )

6.strcmp(const char*s 1,const char*s 2)比較サイズ
  :extern int strcmp(const char *s1,const char * s2);
  :#include 
  :     s1 s2。
  :
 s1s2 ,   >0

7.パッケージ
#include      
#include "xxx.h"        c/c++  

8.Void*
Void           
Void i;//   ,          
Void* i //   ,       

9.メモリ四領域モデル
  :         ,           ,               
  ;             ,               malloc-free, new-delete
   :       ,     
     :             

10.マクロ定義関数
1.       ,      ,       。
#define N 5; //     ,   N   5;
      :#define MAX(a,b) ((a)>(b)?(a):(b))
        : MAX(a,b) { return a>b?a:b;}
  :
#define Jin(NAME) java_jin_##NAME

std::string java_jin_wirte(char* c){
    return c;
}

std::string java_jin_read(char* c,int a){
    return c;
}

extern "C"
JNIEXPORT jstring JNICALL
Java_com_example_ts_javatoc_MainActivity_getJin(JNIEnv *env, jobject instance) {
    std::string hello = Jin(read)("       ",2);
    return env->NewStringUTF(hello.c_str());
}

11.struct構造体とclassクラスの違い
1. C STRUCT        ,          。  C++     C      ,
       ,    STRUCT         ,    STRUCT          
   。STRUCT      ,  ,  。
2.      :   STRUCT           PUBLIC ,CLASS   PRIVATE,
       STRUCT    CLASS,      ,   PUBLIC,PRIVATE,PROTECTED
         。      ,               。
  :
CLASS A { INT A=0;//  ,            };
3.                  struct   ,  c++        ,   class。

12.c++のテンプレートクラス使用
開発中にテンプレートクラスtemplateに設計された場合、同じクラスに書くhppファイル=h+cppを宣言し、実装します.
#ifndef JAVATOC_TESTT_HPP
#define JAVATOC_TESTT_HPP

template 
class MyTemplateName{
private:
    T index;
    char *x;
public:
    MyTemplateName();
    T getIndex();
    void setIndex(T dex);
    //     
    ~MyTemplateName();
};

#endif //JAVATOC_TESTT_HPP

template 
//       -- MyTemplateName
MyTemplateName::MyTemplateName() {
}

template 
void MyTemplateName::setIndex(T dex) {
    this->index = dex;
}

template 
T MyTemplateName::getIndex() {
    return this->index;
}

13.c++におけるvector/set集合注意の問題
c++    vetcor   set                    
using namespace std;        ,  vector       :

#include 
#include 

using namespace std;

vector sv;
sv.push_back("s");
sv.pop_back();

set set1;
                 ,                    
    
std::vector<:string> sv;
sv.push_back("s");
sv.pop_back();

std::set<:string> set1;

14.定義済み関数オブジェクトと関数アダプタ
         :  ,  , , , , (c++      )
  :foreach,transform(      ),
  :find,find_if,
  :count,count_if,
  :megre,
  :sort,
  :random_shuffle ,copy,replace

     :bind2nd() 
  :https://www.cnblogs.com/smh2015/p/9656648.html

15.c/c++パラメータ伝達
       c/c++      (  )          /  ,            ,               object  :

  :
Bitmap2mat(JNIEnv *env, Mat *mat)
Bitmap2mat(JNIEnv *env, Mat &mat)
  :
Bitmap2mat(JNIEnv *env, Mat mat)

まとめ:c/c++のSTLは集合,反復器,アルゴリズムの分離である.