std-function 相关问题

一个C ++ 11类模板,可以像函数一样调用,并包装另一个可调用类型并转发对它的调用。

如何将调用者对象作为参数发送给回调函数

我如何从类对象自己的回调函数中访问其成员? 我尝试将调用者对象作为回调函数的参数发送,并从回调函数访问它。 在

回答 1 投票 0

如何将不同返回类型的不同方法(成员函数)分配给定义为auto的变量?

我需要将具有不同返回类型的不同方法(成员函数)分配给定义为自动变量的变量。 因此,返回相同数据类型的以下代码可以按预期工作...

回答 1 投票 0

一个需要另一个函数作为参数的函数如何可以在c++的类中使用?

我见过这个问题的不同版本,但它并没有真正解决我的问题。情况是这样的,我想使用一个库,但其中一个功能非常复杂,需要......

回答 1 投票 0

为什么 std::function 试图在这里调用复制构造函数?

#包括 结构体MyFoo { MyFoo() {} MyFoo(const MyFoo&) = 删除; MyFoo(MyFoo&&) = 默认; MyFoo& 运算符=(const MyFoo&) = 删除; 我的Foo&...

回答 1 投票 0

C++ std::function 没有虚函数?

是否可以创建与 cpp std::function 等效但不使用虚函数的东西?我所说的“等价物”是指它接受任何可调用的(函数、函数指针、有趣的......)

回答 1 投票 0

如何将 lambda 与临时对象一起使用来实现移动语义?

假设我有类“X”,它实现了移动语义。 在此类中,copy-ctor 被删除: X级 { /* ...数据... */ X(X&&其他) { /* ...移动代码... */ }...

回答 1 投票 0

为什么将operator()作为std::function调用不起作用

考虑这个旨在收集字符串序列的小类: 班级问题_t期末 { 私人的: std::vector m_issues; 民众: constexpr void 运算符()(std::string&a...

回答 1 投票 0

了解 std::function 的开销并捕获同步 lambda

考虑以下简单示例: #包括 #包括 #包括 #包括 #包括 #包括...

回答 1 投票 0

将 void* 转换为 std::function

我有一个问题。我正在尝试将 void* 转换为 std::function 。 这只是一个简单的例子,任何建议将不胜感激 #.h 文件 类示例{ 民众: 例子(); int foo(void* ...

回答 2 投票 0

带有std::function类型参数、nullptr值和shared_ptr类型的函数模板重载

下面的例子中,为什么最后一个调用的是以std::function为参数的函数重载呢? #包括 #包括 #包括 模板<...

回答 1 投票 0

mem_fn、bind、传递参数时的功能区别

如下面的代码和输出所示,可以观察到三个现象: 对于mem_fn,即代码中的f1,无论是传递ff还是&ff,ff对象中的num_值都不能修改也...

回答 1 投票 0

对于 std::function 如何轻松确定捕获是否需要分配(或不需要)

std::function 的实例本身具有空间,用于包含有限大小的“捕获”参数。为了避免破坏内存分配,我想确保某些实例......

回答 1 投票 0

将成员函数 const 和非常量重载传递给 std::function

我试图让函数指针操作变得“更流畅”,但当有两个重载:const 和 non-const 时,我在将成员函数传递给 std::function 时遇到了问题。

回答 2 投票 0

使用 std::function 作为比较器时函数调用错误

我在我的集合中使用 lambda 而不是比较器类,但我遇到了问题。 我有这样的事情: 类处理器{ 私人的: 常量函数 我在我的集合中使用 lambda 而不是比较器类,但我遇到了问题。 我有这样的东西: class Processor { private: const function<bool(std::string, std::string)> _lenComp = [](string a, string b) { return a != b && a.size() >= b.size(); }; set<string, decltype(_lenComp)> _inputSet; // ... public: Processor() : _inputSet() { } void addLine(string line) { _inputSet.insert(line); } 当我创建 Processor 实例并调用 addLine 2 次时,我收到错误的函数调用异常。 如何正确初始化此类? decltype(_lenComp) 是 function<bool(std::string, std::string)>,它是一个空的 std::function,所以在调用它时会收到错误的呼叫。 你想要的是存储在其中的 lambda 的类型,你应该用 static constexpr auto 来定义它,因为你不允许知道 lambda 的类型。 class Processor { private: static constexpr auto _lenComp = [](string a, string b) { return a != b && a.size() >= b.size(); }; set<string, decltype(_lenComp)> _inputSet; }; 扩展另一个答案:在这一行中,lambda 的类型和 _lenComp 的类型不同: const function<bool(std::string, std::string)> _lenComp = [](string a, string b) { return a != b && a.size() >= b.size(); }; std::function<bool(string, string)> 是一个通用的包装函子,它可以保存任何类型的返回 bool 并接受两个字符串的函数,无论是 lambda、常规函数还是静态方法。您可以重新分配此容器包装的实际实现。 您所做的是创建一个具有不透明(隐藏)类型的 lambda 并将其存储在包装器的实例中。然后将 wrapper 的类型传递到 std::set 模板中。 当 _inputSet 被构造时,它不知道你的 lambda。它将构造一个给定的比较器类型的新实例,在您的例子中是一个 std::function。默认构造的 std::function 是空的。 如果您想保留 std::function,则上述问题的另一个修复方法是在构造集合时将已有的比较器实例传递给集合,如下所示: // ... const function<bool(std::string, std::string)> _lenComp = [](string a, string b) { return a != b && a.size() >= b.size(); }; set<string, decltype(_lenComp)> _inputSet; public: Processor(): _inputSet({}, _lenComp) {} // ...

回答 2 投票 0

如何在 C++ 中将参数包传递给 void 指针?

请考虑以下代码示例: #包括 #包括 模板 类某类 { 民众: std::function 一些...

回答 2 投票 0

如何向不带参数的函数(有参数)添加指针,并稍后使用自定义参数调用它们 C++

我会尽量保持简短。尽我所能。 我有一个法术类别,主要是持续时间、冷却时间、伤害、伤害类型等。 我有 SpellManager 类,应该实例化

回答 1 投票 0

消除使用binary_function和result_type

我正在尝试将一个废弃的开源库更新为 C++11 和 17。它使用 std::binary_function 及其 result_type 的方式我不确定如何删除。这些功能在 C++1 中已被弃用...

回答 1 投票 0

您应该通过引用捕获数据成员还是使用 lambda 中的 [this] 捕获数据成员?

如果我需要生成一个调用成员函数的 lambda。我应该通过引用捕获还是捕获它?我的理解是 & 仅捕获使用的成员,但这捕获了所有数据

回答 4 投票 0

std::function 的目的是什么以及如何使用它?

我有必要使用 std::function 但我不知道以下语法意味着什么。 std::function f_name = []() { FNAME(); }; 使用 std::function 的目标是什么?难道是……

回答 3 投票 0

std::function 如何工作[重复]

你知道,我们可以将 lambda 函数包装或存储到 std::function 中: #包括 #包括 int main() { std::function 添加 = [](float...

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.