typedef模板类的声明

时间:2010-07-20 19:51:29

标签: c++ templates

与元编程相比,两者之间存在差异 声明?

template<typename T>
struct matrix {
    typedef matrix self_type;    // or
    typedef matrix<T> self_type;
};

谢谢

2 个答案:

答案 0 :(得分:6)

在这种特殊情况下(在类模板中),matrixmatrix<T>的简写。当你整天写出很多毛茸茸的模板,同时试图将所有东西都装在80列中时​​,欢迎使用速记。

请注意,您还可以缩写方法参数:

template <typename T>
struct matrix
{
    typedef matrix my_type;
    matrix(); // constructor is abbreviated too
    matrix& operator=(matrix);
};

// Method argument types can be abbreviated too
// but not result types.
template <typename T>
matrix<T>& matrix<T>::operator=(matrix m)
{
    // ...
}

答案 1 :(得分:0)

他们都指的是同一种类型。 我能看到的唯一区别是从性能角度来看: 我想(取决于编译器实现),矩阵本身就是关于类本身的引用,因此它不需要环境中的任何东西。矩阵正在讨论由T(即矩阵)模板化的模板化类矩阵,因此它可能需要编译器的更多推导机制。 但我只是在猜测,我从来没有读过任何关于此的内容。