基于封闭的类模板参数有条件地定义嵌套类

时间:2018-04-05 14:15:04

标签: c++ c++11 templates

矩阵只有在方形(M==N)时才具有LU分解。有一种简单的方法可以禁用class lu和方法luFactorization iff M!=N吗?

template<int M, int N>
class matrix {

    // lots and lots of operators and stuff
    // ...

    class lu {
        // ...
    }

    lu luFactorization() {
        // ...
    }

}

1 个答案:

答案 0 :(得分:5)

定义&#34;简单&#34;。 :)

模板部分专业化确实有效:

template <int M, int N>
class matrix {
    // class lu, function luFactorization *not* defined
};

template <int N>
class matrix<N,N> {
    // class lu, function luFactorization defined
    class lu { };
    lu luFactorisation() { /* ... */ }
};

如果两种型号都有很多行李,您可以将部分或全部行李移至共同的超级舱。您还可以考虑制作luluFactorisation非会员模板。