我试图理解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”是指什么?
再次感谢你!
答案 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());