C++ 对std::函数参数强制执行const ref

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,没有引

我有一个接受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
,没有引用。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{};