尝试删除MatrixX之后的<T>
template<typename T>
using MatrixX<T> = Eigen::Matrix<T, ...
// wrong ....^^^
如果您在名称 foo 的 using 定义之前使用模板声明,则暗示您是在 foo 上定义模板参数,所以很简单
namespace EigenRM
{
template<typename T>
using MatrixX = Eigen::Matrix<T, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor>;
}
-- 编辑--
OP 说
这正是我不想做的。我正在尝试在未模板化的函数中编写 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> 的别名。
我没有安装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> >{}, "!");
}