Вам нужно будет использовать параметр шаблона шаблон:
template <template <class> class matrixform, class input_T>
class Layer { /* ... */ };
Примечание что для использования параметра шаблона шаблона templat e, предоставленные в качестве аргумента, должны иметь параметры, которые точно соответствуют списку. Итак, в этом примере здесь может использоваться только шаблон с одним параметром типа для создания экземпляра Layer
.
Это проблема, особенно потому, что параметр шаблона класса может иметь аргумент по умолчанию. Класс Boost identity_matrix
, например, имеет два параметра шаблона: тип и распределитель, которые должны использоваться, поэтому он не может использоваться для создания экземпляра Layer
(параметр распределителя имеет аргумент по умолчанию).
Вместо этого вы можете использовать в качестве параметра шаблона используемый экземпляр шаблона и получить input_T
из typedef, определенного этим типом. Например:
template <typename MatrixT>
class Layer
{
typedef typename MatrixT::value_type ValueT;
};
MatrixT
вот что matrixform<input_T>
в вашем примере, и ValueT
ваш input_T
.
Это может быть реализован в виде,
Layer<identity_matrix<double> > mylayer;
+1, вы 10 секунд быстрее. :) –
вы можете объяснить, что внутри класса? –
@ismail: Что именно вы не понимаете? (И почему так печатать «пожалуйста»?) –