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