#include "boost/numeric/ublas/matrix.hpp"
using namespace boost::numeric::ublas;
template <class matrixform,class input_T>
class Layer
{
private:
matrixform <input_T>;
public:
};我想要能做到
int main ()
{
Layer<identity_matrix, double> mylayer;
}但
layer.hpp:18: error:‘matrixform’不是模板layer.hpp:18: error:声明没有声明任何
发布于 2010-08-14 14:54:16
您需要使用模板模板参数:
template <template <class> class matrixform, class input_T>
class Layer { /* ... */ };注意,为了使用模板模板参数,作为参数提供的模板必须具有与列表完全匹配的参数。因此,在这里的示例中,只能使用一个接受一个类型参数的模板来实例化Layer。
这是一个问题,特别是因为类模板参数可以具有默认参数。例如,Boost identity_matrix类有两个模板参数:要使用的类型和分配器,因此它不能用于实例化Layer (分配器参数具有默认参数)。
相反,您可以做的是将要使用的实例化模板作为模板参数,并从由该类型定义的type获取input_T。例如:
template <typename MatrixT>
class Layer
{
typedef typename MatrixT::value_type ValueT;
};MatrixT这里是您的示例中的matrixform<input_T>,ValueT是您的input_T。
这可以实例化为,
Layer<identity_matrix<double> > mylayer;发布于 2010-08-14 14:58:17
template <class templatedmatrixform>
class Layer
{
private:
templatedmatrixform matrix;
public:
};
template<typename T>
class identity_matrix
{
typedef T input_T;
};
int main ()
{
Layer<identity_matrix<double> > mylayer;
} https://stackoverflow.com/questions/3483861
复制相似问题