嵌套模板类专用化的语法
Syntax for specialization of nested template class
我正在尝试找出嵌套模板类显式专用化的正确语法。 以下代码将更好地说明:
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 */
};
};
我想为template <> class Matrix<...>::Iterator<Row_Major
写一个明确的专业化,但语法让我无法理解。 我怀疑,如果没有对包含类 Matrix 的显式特化,就不可能显式专用化 Iterator 类。 但如果有办法做到这一点,我会很高兴。
我知道我可以使 Iterator 类成为一个单独的类,而不是 Matrix 类的成员,但是将类嵌套为这样允许我完全访问 Matrix 类的模板参数和数据meber,这简化了事情。 我知道如果需要,我可以解决这个问题,但我首先想调查和了解嵌套方法的可能性。
谢谢什穆埃尔
对于显式特化,您需要先对外部类进行专用化,然后再对内部类进行专用化,例如您可以看到这个问题。
有一种解决方法是使用部分专用化:
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++11 使 Synxis 答案(使用默认虚拟参数)更加干净:
/// template <typename X>, not needed for the example
struct Outer
{
private:
template <typename A, typename D = void>
struct Inner
{
Inner() { cout << "default" << endl; }
};
template <typename D>
struct Inner<int,D>
{
Inner() { cout << "int" << endl; }
};
public:
template <typename T>
using Nested = Inner<T>;
};
这种改进的优点是 Nested 的签名只有一个模板参数,如果您想在模板元编程中正确匹配它,我认为这将有所帮助。
我很
惊讶嵌套类的模板参数不是父类的参数。
嵌套类可以使用父类的模板参数,这会将嵌套类与父类更紧密地联系在一起。 您对迭代器一词的使用表明这很好,迭代器肯定会迭代父级包含的相同类型?
我会这样做:
template <class T>
class Outer
{
public:
class Inner
{
void Fn( T in )
{
}
};
};
// specialisation
void Outer<double>::Inner::Fn( double in )
{
}
相关文章:
- 1d 智能指针不适用于语法 (*)++
- .cpp和.h文件中的模板专用化声明
- 助记符和指向成员语法的指针
- 有人能分解一下这个c++模板的语法吗
- C++避免重复声明的语法是什么
- QMetaObject invokeMethod的基于函数指针的语法
- 调用专用模板时出错"no matching function for call to [...]"
- 模板专用化(按容器):value_type
- 这个语法std::class<>{}(arg1, arg2) 在C++中是什么意思?
- C++成员模板专用化语法
- 模板化类和模板化方法的模板专用化语法
- 函数模板专用化语法聚合模板化类型
- C++与部分模板专用化语法混淆
- 模板类部分专用化语法
- 显式专用化语法
- 类模板专用化中的成员函数语法
- 在不使用专用语法的情况下,为不同类型的不同方式实现模板类的方法是否有效C++?
- 嵌套模板类专用化的语法
- 模板模板部分专用化的正确语法是什么
- 函数语法 显式专用化