DefaultClass
テンプレートクラスであるクラスがあるとします。trait を特殊化する多くのクラスがあります。spec_traits
それらをSpecClass1
itp と呼びましょう。. SpecClass#
so のように、それ自体が 1 つのパラメーターを持つテンプレートにすることができますSpecClass2<T>
。DefaultClass
そのように実装し、使用できるエレガントな方法はありDefaultClass<SpecClass1>
ます DefaultClass<SpecClass<SomeType>, SomeType>
か。私は専門を使用します:
// DefaultClass.hpp
template<typename T>
class _phonyTemplate;
class _phonyType;
class _phonyNonTemplate;
template <template <class> class TemplateT, class TypeT, class NonTemplateT>
class DefaultClass;
// for DefaultClass<SpecClass<SomeType>, SomeType>
template <template <class> class TemplateT, class TypeT>
class DefaultClass<TemplateT, TypeT, _phonyNonTemplate>
{
// use SpecClass# traits
typedef spec_traits<TemplateT<TypeT> >::some_type used_type;
};
// for DefaultClass<SpecClass1>
template <class NonTemplateT>
class DefaultClass<_phonyTemplate, _phonyType, NonTemplateT>
{
// use SpecClass# traits
typedef spec_traits<NonTemplateT>::some_type used_type;
};
// SpecClass1.hpp
class SpecClass1 : public DefaultType<_phonyTemplate,
_phonyType, SpecClass1> {};
// SpecClass2.hpp
template <typename TypeT>
class SpecClass2 : public DefaultType<SpecClass2,
TypeT, _phonyNonTemplateT> {};
これらのタイプを使用するより良い方法はあり_phony
ますか?