0

我正在尝试理解 C++ 中的模板类。首先,我想了解这条线的含义:

template <typename T, typename Ord = columns, typename All = abc::allocator<T,16> >
class matrix

其中 columns 和 allocator 分别是在其他地方定义的结构和类(命名空间 abc 中的第二个)。令我困扰的是它似乎有一个已经初始化的类型名。这是什么意思?当我想使用这个模板时,我是否也应该初始化 Ord 和 All 的类型名?

此外,还有这个唯一的构造函数:

explicit matrix(unsigned int rows = 0, unsigned int cols = 0, T init = T())

但它似乎已经被初始化了。init 应该是什么意思?

我向您保证,我查看了所有代码,但没有什么可以帮助您更好地理解。感谢您的关注。

编辑:谢谢大家的回答。只是一点保证(我是 C++ 的菜鸟):

int const& operator() operator()(unsigned int i, unsigned int j) const

这个方法意味着,当我们初始化类 foo 时,我们可以通过 foo()(1,2) 调用它,其中 i=1 和 j=2。我对吗?这两个“const”指的是什么?

再次感谢你!

4

4 回答 4

1

这意味着该类的用户已经设置了一个合理的默认值——例如,您可以提供一个,但您不必提供。构造函数参数也是如此。至于论点是什么意思,只有你能回答。

于 2012-10-21T15:06:08.963 回答
1
template <typename T, typename Ord = columns, typename All = abc::allocator<T,16> >
class matrix
{ 
    //...
};

这些是默认模板参数,它们就像默认函数参数一样工作 - 您可以指定它们,但如果您不指定它们,它们就是默认值。

你可以看到一个使用函数默认参数的例子。


底线 - 以下所有行都是正确的:

matrix<int> a; // matrix<int, columns, abc::allocator<int, 16> >
matrix<int, rows> b; // matrix<int, rows, abc::allocator<int, 16> >
matrix<int, columns, abc::other_allocator<int, 32> > c; // obvious

matrix<int> a = matrix<int>(); // constructor called with 0, 0 and 
// int() - default constructed T - in this case, int -  as arguments
matrix<int> a(1, 2); // constructor called with 1, 2 and int() as arguments
matrix<int> a(1, 2, 100); // obvious
于 2012-10-21T15:10:38.347 回答
0

这是一个默认值。如果没有指定模板参数,它将采用默认值。
就像您在函数中有默认值一样:

void blah(int a = 0) { }
于 2012-10-21T15:08:16.067 回答
0

如您所知,C++ 函数参数可以具有默认值,如果用户不提供该参数,则 C++ 编译器会为它们使用该默认值。现在在构造函数init中有一个默认值,T()它的意思是使用其默认构造函数的类型值,例如,如果T=int然后T()意味着0,如果它是一个std::string它是一个空字符串。您甚至可以将此语法用于其他参数:

explicit matrix(
    unsigned int rows = unsigned int(),
    unsigned int cols = unsigned int(),
    T init = T());
于 2012-10-21T15:10:17.163 回答