示例代码
template <typename Callback>
void read_input(const std::string& prompt, const Callback& cb)
{std::thread([prompt, cb](){std::cout << prompt << ": ";std::cout.flush();std::string line;std::getline(std::cin, line);cb(std::move(line));}).detach();
}struct no_copy {no_copy() = default;no_copy(no_copy&&) = default;no_copy& operator=(no_copy&&) = default;no_copy(const no_copy&) = delete;no_copy& operator=(const no_copy&) = delete;
};no_copy nc;
read_input("input", [nc = std::move(nc)](std::string) {});
坑点
- 上述 代码首先编译不过
- 尝试调用no_copy的移动构造,实际会变成调用no_copy的拷贝构造
- 如果no_copy 和 read_input都是第三方库定义的,那意味着什么呢?你至少需要修改一处第三方库代码
- no_copy 改为可以拷贝构造
- read_input的回调移除const
不修改三方库代码,如何解决
std::share_ptr<no_copy>