使用或typedef减少模板参数

时间:2017-11-13 22:44:53

标签: c++ c++11 templates typedef using

我正在尝试通过引入“using”关键字来增加我的代码可读性。

namespace EigenRM
{
    template<typename T>
    using MatrixX<T> = Eigen::Matrix<T, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor>;
}

此代码无效。 我见过使用“using”删除所有模板参数的示例,但没有用于保留模板参数。这甚至可能吗?

1 个答案:

答案 0 :(得分:4)

尝试在def logfunc(T, a, b, c): arg = b - T arg[np.where(arg < 1.e-16)] = 1.e-16 return a*np.log(arg) + c

之后删除<T>
MatrixX

如果您在名称template<typename T> using MatrixX<T> = Eigen::Matrix<T, ... // wrong ....^^^ 的{​​{1}}定义之前加上模板声明,则隐含您要在using上定义模板参数,所以只需

foo

- 编辑 -

OP说

  

这正是我不想做的事情。我试图在未模板化的函数中编写foo //而不是namespace EigenRM { template<typename T> using MatrixX = Eigen::Matrix<T, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor>; }

如果您删除“EigenRM::MatrixX<double>”,这就是您所获得的:Eigen::Matrix<double, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor>成为<T>的别名。

我没有EigenRM::MatrixX<double>安装,但下面的例子应该解释我的意思

Eigen::Matrix<double, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor>