【发布时间】:2019-11-07 14:15:12
【问题描述】:
我正面临 C++ 类的编译问题。
我的代码在这里:
#include <chrono>
#include <cstdint>
#include <thread>
#include <functional>
class Monitors {
public:
Monitors(std::uint32_t timeout1, std::uint32_t timeout2) : timeout_1(timeout1), timeout_2(timeout2) {
timer_start(task_1, timeout1); //does not compile
timer_start(&Monitors::task_2, timeout2); //does not compile either
}
private:
void timer_start( std::function<void(void)>& func, std::uint32_t interval) {
std::thread([func, interval]() {
while (true) {
func();
std::this_thread::sleep_for(std::chrono::milliseconds(interval)); }
}).detach();
}
void task_1() {
}
void task_2() {
}
private:
std::uint32_t timeout_1;
std::uint32_t timeout_2;
};
错误是:
非 const 左值类型 std::function 不能绑定到临时 输入无效
有什么问题?我该如何解决?
【问题讨论】:
-
请小心那个
sleep_until电话。想想如果func的执行时间长于interval会发生什么。改变你做事的顺序将解决这个问题。 -
是的,我修改了代码。
标签: c++ c++14 std-function