【问题标题】:Regarding template type parameters in C++关于 C++ 中的模板类型参数
【发布时间】:2011-12-16 21:03:38
【问题描述】:

我一直在浏览这里的一些问题,发现一些示例代码传递(看起来像)一个转换为 void 类型的整数作为模板化对象的类型参数。这是我的意思的一个例子:

SomeRandomObject<void(int)> Object;

如果有人能解释代码的“void(int)”部分及其作用,我将不胜感激。

【问题讨论】:

    标签: c++ templates object void


    【解决方案1】:

    该类型是“接受int 并返回void 的函数”。

    【讨论】:

      【解决方案2】:

      类型是函数类型。你可能对它不太熟悉,因为到目前为止它只用于指针类型:

      typedef int (ft)(void);  // Huh?  (raw function type)
      typedef ft *fp;          // ???   (pointer to function)
      
      typedef int (*fp_oldstyle)(void); // Ahh... (same as fp)
      

      函数本身确实有类型,但是由于您不能声明该类型的变量或对该类型的引用,因此您通常会使用的唯一东西是指针,它们在最后一行以熟悉的语法声明。对于任何函数int foo(void);foo&amp;foo 都被解释为指针,因此不需要“原始”函数类型ft

      但是,随着 std::functionstd::bind 和 lambdas 的新模板魔法,现在在模板参数中看到裸函数类型变得更加普遍。

      【讨论】:

      • 可以有函数引用。
      • @AraK:啊,那是真的:ft & f = foo; F();。谢谢!不过好像用的不多;我想是因为引用不可重新分配。
      • 我同意,我很少看到。我的相关问题:stackoverflow.com/questions/1516958/…
      猜你喜欢
      • 1970-01-01
      • 2012-07-02
      • 1970-01-01
      • 1970-01-01
      • 2020-07-09
      • 2023-03-31
      • 2014-10-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多