奇怪的类型名称和模板中的构造函数

时间:2012-10-21 15:02:43

标签: c++ class templates explicit typename

我试图理解C ++中的模板类。首先,我想了解这一行的含义:

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

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

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

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

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

我向您保证,我查看了所有代码,但没有任何内容有助于更好地理解。谢谢你的关注。

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

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

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

再次感谢你!

4 个答案:

答案 0 :(得分:1)

这意味着该类的用户已设置了合理的默认值 - 例如,您可以提供一个,但您 。构造函数参数也是如此。至于论证的含义,只有你能回答这个问题。

答案 1 :(得分: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

答案 2 :(得分:0)

这是默认值。如果未指定template参数,则采用默认值 就像你在函数中有默认值一样:

void blah(int a = 0) { }

答案 3 :(得分: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());