首页 文章

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

提问于
浏览
0

我试图理解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 回答

  • 1

    它指定了's a default value. If the the template argument isn',它将采用默认值 .
    就像你在函数中有默认值一样:

    void blah(int a = 0) { }
    
  • 0

    如您所知,在C函数中,参数可以具有默认值,并且如果用户不提供该参数,则C编译器将使用该默认值 . 现在在构造函数 init 中,默认值为 T() ,这意味着使用其默认构造函数的类型值,例如,如果 T=intT() 表示 0 ,如果它是 std::string 则为空字符串 . 您甚至可以将此语法用于其他参数:

    explicit matrix(
        unsigned int rows = unsigned int(),
        unsigned int cols = unsigned int(),
        T init = T());
    
  • 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
    
  • 0

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

相关问题