gpt4 book ai didi

模板的c++模板

转载 作者:行者123 更新时间:2023-11-28 01:10:44 30 4
gpt4 key购买 nike

#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’ is not a template layer.hpp:18: error: declaration does not declare anything

最佳答案

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

template <template <class> class matrixform, class input_T>
class Layer { /* ... */ };

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

这是一个问题,特别是因为类模板参数可以有一个默认参数。助推器 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;

关于模板的c++模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3483861/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com