代码之家  ›  专栏  ›  技术社区  ›  coJetty

使用或typedef减少模板参数

  •  0
  • coJetty  · 技术社区  · 7 年前

    我试图通过引入“ using “关键字。

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

    此代码无效。 我看到过使用“ 使用 “删除所有模板参数,但不保留一个。这可能吗?

    1 回复  |  直到 7 年前
        1
  •  4
  •   max66    7 年前

    尝试删除 <T> 之后 MatrixX

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

    如果您在 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> ": 特征rm::矩阵x<双(>); 成为的别名 .

    我没有一个 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> >{}, "!");
     }