gpt4 book ai didi

c++ - 这个模板中的类型是什么?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:38:41 24 4
gpt4 key购买 nike

std::tr1::_Bind<void (*()(std::tr1::reference_wrapper<int>))(int&)>

我明白了std::tr1::reference_wrapper<int>整个事情是某种返回void的函数指针并采取 int&作为论据。但一开始我似乎无法遵循 *() 。代码是从我前一段时间经历的某个 gdb session 中剪切粘贴的。

此外,tr1::function 的类型是什么?某些返回 void 且不带参数的函数?

0x00000001000021a1 in std::tr1::function<void ()()>::operator() (this=0x7fff5fbffb98) at functional_iterate.h:865

但是下面是一个错误:

template <typename T>
void f()
{
cout << "general\n";
}

template<>
void f<void ()()> () // this is error
{
cout << "specific\n";
}

最佳答案

这是 std::tr1::_Bind 的一个实例在采用 std::tr1::reference_wrapper<int> 的函数类型上实例化并返回指向引用 int 并返回 void 的函数的指针。

阅读方法如下:

  • std::tr1::_Bind< 输入 >应该清楚。
  • 输入 = void ( fn )(int&)是一个取 int& 的函数并返回 void .
  • fn = * ptr 所以它实际上是一个指向函数的指针
  • ptr = ( fn2 )(std::tr1::reference_wrapper<int>)是一个取 std::tr1::reference_wrapper<int> 的函数到目前为止,我们只有它的返回类型。
  • fn2 =(空)因为我们没有给该函数(类型)命名。

然而,正如我现在注意到的那样,当 fn2 为空时,它周围的括号可能也不应该存在(类似于您编写函数类型“不带参数并返回 void 的函数”的方式void() ,而不是 void()()

案例在std::tr1::function正是那个:一个不带参数并返回void的函数,在空的“函数名称”周围加上额外的括号。

OK,现在测试一下:gdb 确实输出了void()作为void()() ;这可能应该被视为 gdb 错误。

因此,在 C++ 中编写第一种类型的正确方法是:

std::tr1::_Bind<void (*(std::tr1::reference_wrapper<int>))(int&)>

关于c++ - 这个模板中的类型是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10165337/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com