C ++在初始化std :: function时如何将占位符绑定到reference / ref参数?

问题描述 投票:0回答:1
#include <functional>
#include <string>

int fn( int a, int & b ) { return a+b; }

struct Fn_struct {
    std::string name {};
    // std::function<int (int,int&)> my_fn {};
    std::function<decltype(fn)> my_fn {};
};

int main()
{
    Fn_struct my_fn_struct1 {"fn(a,b)", std::function<decltype (fn)> {fn} };
    Fn_struct my_fn_struct2 {"fn(a,b)", {fn} };
    Fn_struct my_fn_struct3 {"fn(a,b)", {std::bind( fn, 1, 2) }};
    auto fn_b = std::bind( fn, 1, std::placeholders::_1 );
    Fn_struct my_fn_struct4 {"fn(a,b)", {std::bind( fn, 1, std::placeholders::_1) }};  // todo: why can't int b be a reference?
}

my_fn_struct4无法编译,由于失败而找到绑定的构造函数。但是,如果b不是引用,它将进行编译。

另一方面,fn_b会编译。

任何解释将不胜感激。

请不要问我为什么要这样做。除非完全必要,否则我不希望使用指针来完成此操作。

c++ std-function stdbind
1个回答
0
投票

[std::bind( fn, 1, std::placeholders::_1 )返回std::function<int(int &)> my_fn{};

#include <functional>
#include <string>

int fn( int a, int & b ) { return a+b; }

struct Fn_struct {
    std::string name {};
    std::function<int(int &)> my_fn{};
};

int main()
{
    Fn_struct my_fn_struct4 {"fn(a,b)", {std::bind( fn, 1, std::placeholders::_1) }};
}
© www.soinside.com 2019 - 2024. All rights reserved.