使用 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 ....^^^
如果您在名称 foo
的 using
定义之前加上模板声明,则暗示您在 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> >{}, "!");
}
我试图通过引入“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 ....^^^
如果您在名称 foo
的 using
定义之前加上模板声明,则暗示您在 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 ofEigen::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> >{}, "!");
}