gpt4 book ai didi

c++ - 了解 C++11 中 std::function 的模板参数?

转载 作者:行者123 更新时间:2023-11-28 06:13:28 25 4
gpt4 key购买 nike

<分区>

我正在复习一些 C++11,但我很难理解某些东西。

std::function 让我可以将任何 Callable 类型作为函数对象传递。我知道它的作用以及如何使用它。

void foo(int a, int b) {} 
std::function<void (int, int)> bar = foo;
...

bar 是一个可调用对象,它的目标是 foo,一个接受两个整数作为参数的函数。

我不明白的是 void (int, int) 到底是什么意思...

  • 我知道这是我给编译器的模板参数。
  • 我知道编译器从中解释可调用类型必须采用两个整数并返回 void。

但是,void (int, int) 似乎没有“命名类型”。

  • void (*)(int, int) 是一个指针,指向接受两个 int 的 void 返回函数
  • void (Foo*::)(int, int) 是指向 Foo 的 void 返回函数的指针,该函数接受两个 int

事实上,下面的玩具片段编译得很好。

class Foo {};
int main(int, char**)
{
void (*)(int, int);
void (Foo*::)(int, int);
}

但是添加表达式 void (int, int) 会导致编译时错误。

在发布我的问题之前,我做了更多的挖掘工作。以下代码片段编译:

class Foo {};

template <typename T>
struct Bar
{
typedef T type;
};

void a(int b, int c) {}

int main(int, char**)
{
void (*)(int, int);
void (Foo::*)(int, int);

Bar<int (int, int)> bar;
}

但是尝试以任何方式使用 Bar::type 都会产生另一个错误:“无效声明的函数类型”。


长篇大论:表达式 void (int, int) 到底是什么意思为什么它是一个有效的模板参数?

感谢您发送给我的任何帮助。

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