我々は、次のようreference_counted
テンプレートとデフォルトdefault_deallocator
クラスを持っている:デフォルトのテンプレート引数で自己タイプを参照するには?
template <class T>
class default_deallocator {
void operator()(T* obj) {
delete obj;
}
};
template <class T>
class reference_counted: T
{
public:
void retain() {ref_count++;}
void release() {
ref_count --;
if (ref_count == 0) {
delete this;
}
}
}
我々はreference_counted
クラスのデアロケータを追加したいです。しかし、コンパイラは再帰型参照について文句を言うので、デフォルトのテンプレート引数を書く方法はわかりません。
//VS2015 says: fatal error C1202: recursive type or function dependency context too complex
template <class T, class D = default_deallocator<reference_counted<T>>> <---
class reference_counted: T
{
public:
void retain() {ref_count++;}
void release() {
ref_count --;
if (ref_count == 0) {
D deallocator;
deallocator.operator()(this);
}
}
}
私はこのエラーを理解しています。 それでは、テンプレートのデフォルト引数などでこのクラスの型を参照してこのデザインパターンを実装する方法が問題になりますか?