使用 using 或 typedef 减少模板参数

Reducing template parameter with using or typedef

我试图通过引入“using”关键字来提高代码的可读性。

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

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

尝试删除 MatrixX

之后的 <T>
template<typename T>
using MatrixX<T> = Eigen::Matrix<T, ...
// wrong ....^^^

如果您在名称 foousing 定义之前加上模板声明,则暗示您在 foo 上定义模板参数,因此只需

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

-- 编辑--

OP 说

This is exactly what i am not trying to do. I am trying to write EigenRM::MatrixX<double> //instead of Eigen::Matrix<double, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor> within an untemplated function

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

我没有 Eigen 安装,但下面的示例应该可以解释我的意思

#include <type_traits>

template <typename, typename, typename>
struct foo;

template <typename T>
using bar = foo<T, float, int>;

int main ()
 {
   static_assert(std::is_same< bar<double>,
                               foo<double, float, int> >{}, "!");
 }