我试图理解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())
但它似乎已经初始化了 . init应该是什么意思?
我向你们保证,我查看了所有代码,但没有什么能够帮助我们更好地理解 . 感谢您的关注 .
编辑:谢谢大家的回答 . 只是一点点保证(我是C中的菜鸟):
int const& operator() operator()(unsigned int i, unsigned int j) const
这个方法意味着,当我们初始化类foo时,我们可以通过foo()(1,2)调用它,其中i = 1且j = 2 . 我对吗?那两个“const”是指什么?
再次感谢你!
4 回答
它指定了's a default value. If the the template argument isn',它将采用默认值 .
就像你在函数中有默认值一样:
如您所知,在C函数中,参数可以具有默认值,并且如果用户不提供该参数,则C编译器将使用该默认值 . 现在在构造函数
init
中,默认值为T()
,这意味着使用其默认构造函数的类型值,例如,如果T=int
则T()
表示0
,如果它是std::string
则为空字符串 . 您甚至可以将此语法用于其他参数:这些是默认模板参数,它们只是作为默认函数参数 - 您可以指定它们,但如果不这样,它们是默认的 .
您可以看到该函数的默认参数的使用示例 .
底线 - 以下所有行都是正确的:
这意味着该类的用户已设置了合理的默认值 - 如同,您可以提供一个,但您不必 . 构造函数参数也是如此 . 至于论点的意思,只有你能回答这个问题 .