【发布时间】:2019-01-30 07:22:49
【问题描述】:
假设我有一个函数,
bool my_func(bool input_val) { return !input_val; }
我想将它作为一个返回 void 且不接受任何内容的函数传递,所以它会是这样的:
bool the_truth = true;
void func_taking_a_void_func(std::function<void()> void_func) {};
func_taking_a_void_func([the_truth]() -> void { my_func(the_truth); });
我第一次尝试使用std::bind,但自然编译器不能使用my_func,因为它返回一个bool而不是void。
func_taking_a_void_func(std::bind(my_func, the_truth));
是否可以执行类似std::bind_and_ignore_return_type 的操作,而无需使用 lambda 封装对函数的调用?我在 VS2013 上使用的是 C++11,但其他的也很好。
【问题讨论】:
-
lambda函数有什么问题?
-
我已经猜到了,但是“编译器说了一些关于函数返回值的内容,并且无法转换”对于一个可靠的答案来说不够详细。当您寻求编译器错误的帮助时,您应该始终发布一个独立的 sn-p 来重现您的问题,并且您应该始终发布您在尝试构建它时遇到的确切错误。
-
func_taking_a_void_func的签名是什么。func_taking_a_void_func(void(*)())?请发布工作代码。 -
请提供minimal reproducible example。 “说明函数返回值,无法转换。”,粘贴。
-
@alfC
void func_taking_a_void_func(std::function<void()>),我应该先把它放在那里,谢谢!