嵌套模板类的特化语法

Shm*_*ine 11 c++ templates inner-classes template-specialization

我试图找出嵌套模板类的显式特化的正确语法.以下代码将更好地说明:

struct Column_Major;
struct Row_Major;

template<size_t rows, size_t cols, typename T, typename Allocator>
class Matrix
{

    /* bunch of members */
    template <typename storage = Column_Major>
    class Iterator
    {
        /* bunch of members */
    };
};
Run Code Online (Sandbox Code Playgroud)

我想写一个明确的专业化template <> class Matrix<...>::Iterator<Row_Major,但语法正在逃避我.我怀疑如果没有包含类Matrix的显式特化,就不可能明确地专门化Iterator类.但如果有办法,我会很高兴.

我知道我可以使Iterator类成为一个单独的类,而不是Matrix类的成员,但是让嵌套的类允许我完全访问Matrix类的模板参数和数据库,这简化了事情.我知道如果需要,我可以解决这个问题,但我首先想调查并了解嵌套方法的可能性.

谢谢,Shmuel

Syn*_*xis 15

对于显式特化,您需要在内部之前专门化外部类,例如,您可以看到此问题.

有一种使用部分特化的解决方法:

template<size_t rows, size_t cols, typename T, typename Allocator>
class Matrix
{

    //                           Notice the additionnal dummy parameter
    //                                       vvvvvvvvvvvvv
    template <typename storage = Column_Major, bool = true>
    class Iterator
    {
    };

    // Specialization
    template <bool dummy>
    class Iterator<Row_Major, dummy>
    {
    };
};
Run Code Online (Sandbox Code Playgroud)