一个C ++ 11类模板,可以像函数一样调用,并包装另一个可调用类型并转发对它的调用。
带有std::function类型参数、nullptr值和shared_ptr类型的函数模板重载
下面的例子中,为什么最后一个调用的是以std::function为参数的函数重载呢? #包括 #包括 #包括 模板<...
如下面的代码和输出所示,可以观察到三个现象: 对于mem_fn,即代码中的f1,无论是传递ff还是&ff,ff对象中的num_值都不能修改也...
对于 std::function 如何轻松确定捕获是否需要分配(或不需要)
std::function 的实例本身具有空间,用于包含有限大小的“捕获”参数。为了避免破坏内存分配,我想确保某些实例......
将成员函数 const 和非常量重载传递给 std::function
我试图让函数指针操作变得“更流畅”,但当有两个重载:const 和 non-const 时,我在将成员函数传递给 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) {} // ...
请考虑以下代码示例: #包括 #包括 模板 类某类 { 民众: std::function 一些...
如何向不带参数的函数(有参数)添加指针,并稍后使用自定义参数调用它们 C++
我会尽量保持简短。尽我所能。 我有一个法术类别,主要是持续时间、冷却时间、伤害、伤害类型等。 我有 SpellManager 类,应该实例化
消除使用binary_function和result_type
我正在尝试将一个废弃的开源库更新为 C++11 和 17。它使用 std::binary_function 及其 result_type 的方式我不确定如何删除。这些功能在 C++1 中已被弃用...
您应该通过引用捕获数据成员还是使用 lambda 中的 [this] 捕获数据成员?
如果我需要生成一个调用成员函数的 lambda。我应该通过引用捕获还是捕获它?我的理解是 & 仅捕获使用的成员,但这捕获了所有数据
我有必要使用 std::function 但我不知道以下语法意味着什么。 std::function f_name = []() { FNAME(); }; 使用 std::function 的目标是什么?难道是……
你知道,我们可以将 lambda 函数包装或存储到 std::function 中: #包括 #包括 int main() { std::function 添加 = [](float...
将类似“函数指针”的成员设置为 noexcept lambda
我无法达到标题中的效果,如以下代码片段所示: #包括 #包括 #定义USEFNPTR #定义 USESTDFUN 类虚拟{ 民众: #...
没有可以执行此转换的用户定义转换运算符,或者无法调用该运算符
我有一个奇怪的错误,我不太明白,使用VS2013。 这只是我的实际问题的简化,导致了同样的错误。 std::function x = (someCondition == true) ...
此代码是从 std::function 中提取并简化的 #包括 #包括 结构体Foo { int num_; }; int main() { 常量 Foo foo(314159); // 存储一个
我正在使用一个库: // 外部库: typedef void (*callback_type)(void *arg); 无效external_register_callback(callback_type回调){ // ... } 它允许注册回调函数:
我已经使用 Loki's Functor 一段时间了,最近我问了一个关于它的问题(仍然没有答案......) 我被告知要使用 std::function,但我更喜欢 Loki 的 Functor sinc 实现...
对我来说描述我所问问题的最好方法是一个简单的例子。 模板 无效execute_example(T *开始,T *结束){ T值=10*0.8; while(开始!=结束){ *开始...
候选函数不可行:将 std::function 作为参数传递(C++)
我正在尝试使用 std::function 作为参数传递给另一个函数,但不断收到以下错误: 无法根据转换解析重载函数 'returnValidsForHuman' ...
std::function 和 lambda 不符合参考要求
使用 viref_func = std::function; viref_func f1 = [](int foo) { ++foo; }; viref_func f2 = [](auto foo) { ++foo; }; viref_func f3 = [](int& foo) { ++foo; }; viref_fu...
为什么 std::function 实现为具有空基声明的部分模板特化?
考虑 std::function 的声明: 模板< class > 类函数; /* 不明确的 */ 模板< class R, class... Args > 类函数; [来源:cppreferen...