其他分享
首页 > 其他分享> > c – 嵌套模板类的特化语法

c – 嵌套模板类的特化语法

作者:互联网

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

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 */
    };
};

我想为模板<>写一个明确的专业化class Matrix< ...> :: Iterator< Row_Major,但语法是我的意思.我怀疑如果没有包含类Matrix的显式特化,就不可能明确地专门化Iterator类.但如果有办法,我会很高兴. 我知道我可以使Iterator类成为一个单独的类,而不是Matrix类的成员,但是让嵌套的类允许我完全访问Matrix类的模板参数和数据库,这简化了事情.我知道如果需要,我可以解决这个问题,但我首先想调查并了解嵌套方法的可能性. 谢谢,
什穆埃尔

解决方法:

对于显式特化,你需要在内部之前专门化外部类,你可以see this question for example.

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

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>
    {
    };
};

标签:c,templates,inner-classes,template-specialization
来源: https://codeday.me/bug/20190929/1829826.html