1
假設我們有一個類DefaultClass
,它是一個模板類。我們有很多種類 ,專門spec_traits
特徵,讓我們打電話給他們SpecClass1
itp。 。 SpecClass#
本身可以是 帶有一個參數的模板,如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
類型?
挑剔:有沒有「模板類」,它是一個「類模板」。而一個類沒有專門的類模板。類模板專門用於模板參數的特定組合。 – pmr