C++ 对std::函数参数强制执行const ref
我有一个接受std::function参数的函数。我希望std::函数有一个bool&参数:C++ 对std::函数参数强制执行const ref,c++,visual-c++,reference,lambda,std-function,C++,Visual C++,Reference,Lambda,Std Function,我有一个接受std::function参数的函数。我希望std::函数有一个bool&参数: void function(std::function<bool(bool&)> lambda); 或 编译器是MSVC2010 N.B. 第一个示例对bool使用了const ref,因为bool变量在另一个线程中被更改,我需要跟踪它的ref值。我不能在lambda中修改它,因此const。对于bool,为什么需要const引用?最好将参数设置为仅bool。没有const,没有引
void function(std::function<bool(bool&)> lambda);
或
编译器是MSVC2010
N.B.
第一个示例对bool使用了const ref,因为bool变量在另一个线程中被更改,我需要跟踪它的ref值。我不能在lambda中修改它,因此const。对于
bool
,为什么需要const
引用?最好将参数设置为仅bool
。没有const
,没有引用。bool在另一个线程中被更改。Nawaz,我知道约束没有被强制执行,因为编译器接受两个lambda,而不仅仅是第二个。std::function
被设计成一个包装器,在您的例子中,它接受const bool&
,并调用任何可以用常量bool&
调用的内容。bool(const bool)
函数可以用const bool&
参数调用。您不应该将此视为用户错误,其中用户就是编写lambda函数的人吗?这和使用boolf(constboolx){…}boolg(constbool&x){returnf(x);}
和使用g
没有什么区别。也许你可以让它取一个指针而不是一个引用,或者把引用封装在一个类中,让它取下这个值。对于bool
,你为什么需要const
引用?最好将参数设置为仅bool
。没有const
,没有引用。bool在另一个线程中被更改。Nawaz,我知道约束没有被强制执行,因为编译器接受两个lambda,而不仅仅是第二个。std::function
被设计成一个包装器,在您的例子中,它接受const bool&
,并调用任何可以用常量bool&
调用的内容。bool(const bool)
函数可以用const bool&
参数调用。您不应该将此视为用户错误,其中用户就是编写lambda函数的人吗?这和使用boolf(constboolx){…}boolg(constbool&x){returnf(x);}
和使用g
没有什么区别。也许你可以让它使用指针而不是引用,或者把引用包装在类中,让它使用它。
auto lambda = [](bool canceled) ->bool{};
auto lambda = [](bool& canceled) ->bool{};