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 |