C および C++ のガベージ コレクターである libgc を使用しています。STL コンテナをガベージ コレクション可能にするには、gc_allocator を使用する必要があります。
書く代わりに
std::vector<MyType>
書かなければならない
std::vector<MyType,gc_allocator<MyType> >
次のようなものを定義する方法はありますか
template<class T> typedef std::vector<T,gc_allocator<T> > gc_vector<T>;
少し前に確認したところ、それは不可能であることがわかりました。しかし、私は間違っていたかもしれませんし、別の方法があるかもしれません。
このようにマップを定義することは、特に不快です。
std::map<Key,Val>
になる
std::map<Key,Val, std::less<Key>, gc_allocator< std::pair<const Key, Val> > >
編集:マクロの使用を試みた後、次のコードがそれを壊すことがわかりました:
#define gc_vector(T) std::vector<T, gc_allocator<T> >
typedef gc_vector( std::pair< int, float > ) MyVector;
テンプレート化された型定義内のコンマは、マクロ引数の区切り記号として解釈されます。
したがって、内部クラス/構造体が最適なソリューションのようです。
C++0X での実行方法の例を次に示します。
// standard vector using my allocator
template<class T>
using gc_vector = std::vector<T, gc_allocator<T> >;
// allocates elements using My_alloc
gc_vector <double> fib = { 1, 2, 3, 5, 8, 13 };
// verbose and fib are of the same type
vector<int, gc_vector <int>> verbose = fib;