0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

FBX SDKのPython版とC++版の違い

Last updated at Posted at 2019-09-26

FBX SDKのPython版とC++版の違い

こちらの公式ドキュメントを読んでみて、理解した内容をメモとして残します。
Differences between FBX SDK and Python FBX

Python版には、C++版の関数のほとんどが含まれていますが、以下が異なるようです。

C++版のテンプレート関数とテンプレートクラスはPython版にはない

テンプレート関数っていうのはC++の構文で、こんな感じのやつです。

template<class T> T Add(T a, T b)
{
    return a + b;
}

T の部分は様々な型を受け入れます。

Pythonにはテンプレート関数という構文はないので、代わりに、型ごとに個別の関数を提供しているようです。

配列の出力はC++版ではポインタ、Python版ではリスト

関数が配列のようなデータを出力するケースの場合、以下のような違いがあります。

  • C++ ではポインタで出力する
  • Python ではリストで出力する

例えば、C++版には GetPolygonVertices という関数があります。
(参考: FbxMesh Class Reference

こんな感じの関数です。(関数の中身は適当)

int* GetPolygonVertices(){
    int* array = new int[num];
    // 何らかの処理
    return array;
}

この関数は、Python版では以下のようになるようです。

def GetPolygonVertices():
    array = []
    # 何らかの処理
    return array

C++版のポインタ渡しはPython版ではタプルになる

複数の値を関数が出力するようなケースの場合、以下のような違いがあります。

  • C++ は、ポインタで渡した引数に出力する
  • Python は、タプル(複数の戻り値)で出力する

例えば、C++版には KeyAdd という関数があります。
(参考: FbxAnimCurve Class Reference

こんな感じの関数です。(関数の中身は適当)

int KeyAdd(KTime pTime, int *pLast){
    // 何らかの処理
    return index;
}

この関数の出力は以下の2つあります。

  • index : 戻り値
  • pLast : ポインタ渡しの引数

この関数は、Python版では以下のようになるようです。

def KeyAdd(KTime pTime):
    # 何らかの処理
    return index, pLast

1つ目の戻り値が index で、2つ目の戻り値が pLast になりました。

さいごに

C++とPythonの文法の違いが比較できて面白いですね。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?