graphics.hatenablog.com

技術系テクニカルアーティストのあれこれ

SWIG最新版で使えるC++11機能一覧。

毎回ドキュメント確認するのしんどいから、自分でざっくりまとめてみた。あくまで自分が理解できた範囲内での記述なので、なんか変なとこあったら指摘してもらえると嬉しいです。
SWIG and C++11

C++11自体については、このあたりを参照すればよいかと。
More C++11
ゲーム開発者のための C++11/C++14
"Effective Modern C++" を読んだメモ。 - graphics.hatenablog.com

注記

  • 「利用可否」の解釈
      • 使える
      • ターゲットコード生成時に無視されるが、意図しない挙動を起こさないと思われる
      • 積極的に使っていきたい
      • ○にならないケースがある
      • ○を意図して実装されたがバグがある
      • %rename等の対処を.i側で行えば使える
      • ターゲットコード生成時に無視され、意図しない挙動を起こす可能性があると思われる
      • 生成されるターゲットコードをおおよそ想定できるときに限り、使うかどうか考えたい
    • ×
      • 場合によっては使えるけど警告を吐く
      • 使えない
      • ターゲットコード生成時に無視され、意図しない挙動を起こす可能性が高いと思われる
      • 使わない

対応表

言語機能

機能名 利用可否 備考
右辺値参照 × 将来的にはデフォルトで無視されるようになる
constexpr ターゲット言語によっては定数にならない
extern template
initializer_list × std::vectorとかで代用するのがおすすめ
uniform initialization
decltype decltype()の引数に式を与えることはできない
range-based for ×
lambda × 今後のバージョンでサポート拡大予定
関数の返り値型を"->"で指定
delegating constructor
inherited constructor 引数なしコンストラクタのみビルド可能
変数の宣言時初期化
final, override
nullptr NULLと同等に扱われることがある
enum class
double angle brackets foo<bar<T> > ではなく foo<bar<T>> でOK
explicit なキャスト演算子
alias宣言 ×
unionのメンバにnon-POD型を含める
可変長テンプレート引数 利用するすべてのケースを%templateで展開すればOK
wide/unicode/raw stringリテラル リテラル内に奇数個の「"」を含む場合にバグがある
ユーザ定義リテラル %renameする必要がある
thread_local ターゲット言語でTLSをサポートしない場合は無視される
関数のdefault指定
関数のdelete指定 ×
[C99] long long int
static_assert
メンバ変数に対するsizeof sizeof(F::a) みたいなやつ
noexcept
alignof
alignas ×
attribute ×

STL

機能名 利用可否 備考
thread ×
tuple ×
unordered_set/map/multiset/multimap ×
regex ターゲット言語が対応していればOK
スマートポインタ系 shared_ptr のみOK
random
wrapper_reference ×
std::function × functorならターゲット言語が対応していればOK
type_traits type_traitsを利用する関数を%templateで展開すればOK
result_of %templateで 展開 すればOK