首页 > TAG信息列表 > std-function

c-为什么在VC2015RC下`is_constructible,int(*)(int,int)> :: value`是true

#include <functional> using namespace std; int main() { static_assert(is_constructible<function<int(int)>, int(*)(int,int)>::value, "error"); } 该代码无法使用GCC和Clang进行编译,而是随Visual C 2015 RC一起传递. 这是符合标准的行为还是错误?解决方法:std :: fun

c – g:用闭包类型初始化的std :: function总是使用堆分配吗?

互联网上的一些消息来源(特别是this one)说std :: function使用小封闭优化,例如:如果闭包大小低于某些数据量,它不会分配堆(上面的链接指示gcc的16个字节) 所以我开始挖掘g头 看起来是否应用这种优化是由“功能”标题中的这段代码决定的(g 4.6.3) static void _M_init_functor(_Any

c – std :: function的用法和语法

我有必要使用std :: function但我不知道以下语法的含义. std::function<void()> f_name = []() { FNAME(); }; 使用std :: function的目标是什么?它是否指向函数?解决方法:std :: function是一种类型擦除对象.这意味着它会删除某些操作发生的细节,并为它们提供统一的运行时接口.对

c – 绑定到weak_ptr

有没有办法将std :: bind绑定到std :: weak_ptr?我想存储一个“弱函数”回调,当被调用者被销毁时,它会自动“断开连接”. 我知道如何使用shared_ptr创建一个std :: function: std::function<void()> MyClass::GetCallback() { return std::function<void()>(std::bind(&MyClass:

c – 使用不同参数的std ::函数的集合

我正在尝试编写一个简单的调度程序,用户代码可以将回调附加到它. 每个事件都有一个已知的签名,用户代码需要使用正确的数字和参数类型调用dispatch.这由可变参数管理.但是,freestandingInt不被接受,因为向量不是正确的类型.如何使它通用? 遵循一个最小的例子 void freestanding() {

c – 具有不同签名的std :: function的向量

我有许多具有不同签名的回调函数.理想情况下,我想将它们放在一个向量中,并根据某些条件调用适当的一个. 例如 void func1(const std::string& value); void func2(const std::string& value, int min, int max); const std::vector<std::function<void(std::string)>> functions

c – 使用std :: function进行回调的Alterantive

目前我正在尝试一个基本上具有以下功能的代码: void f(int x) { cout << "f("<<x<<")" << endl; } class C { public: void m(int x) { cout << "C::m("<<x<<")" << endl; } }; class C2 { public:

c – std :: function中带有静态函数的“未解析的重载函数类型”

尝试将重载的静态函数传递给std :: function时,我收到“未解析的重载函数类型”错误. 我知道类似的问题,例如this和this.但是,即使答案有用于将正确函数的地址转换为函数指针,它们也会失败并使用std :: function.这是我的MWE: #include <string> #include <iostream> #include <fun

C外部函数,指向函数作为参数,在具有成员函数的类中使用

相当新的C.假设我有一个班级: class A { private: double m_x, m_y; public: A(double x, double y): m_x {x} { m_y = extF(m_x, y, *intF); } double intF(double x) { return 2*x; } }; 它利用了其他地方定义的外部全局函数: double extF(double

c – std :: function operator()和std :: forward中发生了什么?

我在看std :: function实现及其调用operator() template<typename Ret, typename... ArgTypes> Ret function< Ret (ArgTypes...)>::operator()(ArgTypes...args) const { // some stuff return invoker(functor, std::forward<ArgTypes>(args)...); } 我特别想知道为

c – 鉴于以下内容,“功能”是什么类型?

鉴于以下内容,“功能”是什么类型? #include <functional> #include <vector> template<class T> class Foo { public: template<typename P, typename Q, typename R, typename... Args> void Attach(P (Q::*f)(Args...), R p) { auto funct

c – 从内部替换std :: function(通过move-assignment到* this?)

是否可以用另一个std :: function替换其中的一个std :: function? 以下代码无法编译: #include <iostream> #include <functional> int main() { std::function<void()> func = []() { std::cout << "a\n"; *this = std::move([]() { s

c – 如何使这些std :: function参数明确无误?

传递lambda时,以下函数重载是不明确的.我发现std :: function可以是constructed from most callable types,即使它们的签名不匹配.所以编译器无法分辨使用哪个函数. template <typename T> void each(std::function<void(T)> iterator); template <typename T> void each(std::fun

c – std :: function type和template instantiation

我是C的新手,我正在学习lambdas,functor和callables,我知道有一个包装类,即std :: function,允许存储和调用不同类型的callables(只要有相同的呼叫签名或功能类型). 现在,我明白你可以使用函数类型参数来实现函数指针参数,如下所示: void fun(int,int*(int,int&)); 它只不过是一个