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)