首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >模板的c++模板

模板的c++模板
EN

Stack Overflow用户
提问于 2010-08-14 14:52:27
回答 2查看 514关注 0票数 0
代码语言:javascript
复制
#include "boost/numeric/ublas/matrix.hpp"
using namespace boost::numeric::ublas;
template <class matrixform,class input_T>
class Layer
{
private:
    matrixform <input_T>;
public:
};

我想要能做到

代码语言:javascript
复制
int main ()
{
Layer<identity_matrix, double> mylayer;
}

layer.hpp:18: error:‘matrixform’不是模板layer.hpp:18: error:声明没有声明任何

EN

回答 2

Stack Overflow用户

发布于 2010-08-14 14:54:16

您需要使用模板模板参数:

代码语言:javascript
复制
template <template <class> class matrixform, class input_T>
class Layer { /* ... */ };

注意,为了使用模板模板参数,作为参数提供的模板必须具有与列表完全匹配的参数。因此,在这里的示例中,只能使用一个接受一个类型参数的模板来实例化Layer

这是一个问题,特别是因为类模板参数可以具有默认参数。例如,Boost identity_matrix类有两个模板参数:要使用的类型和分配器,因此它不能用于实例化Layer (分配器参数具有默认参数)。

相反,您可以做的是将要使用的实例化模板作为模板参数,并从由该类型定义的type获取input_T。例如:

代码语言:javascript
复制
template <typename MatrixT>
class Layer
{
    typedef typename MatrixT::value_type ValueT;
};

MatrixT这里是您的示例中的matrixform<input_T>ValueT是您的input_T

这可以实例化为,

代码语言:javascript
复制
Layer<identity_matrix<double> > mylayer;
票数 3
EN

Stack Overflow用户

发布于 2010-08-14 14:58:17

代码语言:javascript
复制
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; 
} 
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3483861

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档