c++ - 线程中的模板函数
问题描述
我刚开始学习编码,我现在有一个问题...我在论坛上搜索了类似的但我没有找到任何...
我在这个类(函数)中有类(调度程序)和一个模板函数
从这个类的默认构造函数我尝试在一个线程中执行这个函数
我不确定我是否很清楚,所以我给你这些台词:
错误:
-static assertion failed: std::thread arguments must be invocable after conversion to rvalues
-error: no type named 'type' in 'struct std::thread::_Invoker<std::tuple<void (Scheduler::*)(int&, Temperature&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, char), Scheduler*, int, Temperature, const char*, char> >::__result<std::tuple<void (Scheduler::*)(int&, Temperature&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, char), Scheduler*, int, Temperature, const char*, char> >'
该功能(在我的课程调度程序的公共部分中):
template<class T, class S>
void function(T& p_data,S& obj, const std::string p_file, char p_type)
{
for (int i = 0; i<10; i++){
Sleep(3500);
p_data = obj.getData();
serv.fileWrite(p_data, p_file, p_type);
serv.consoleWrite(m_Tmp, 'T');
serv.consoleWrite(m_Prs, 'P');
serv.consoleWrite(m_Hmy, 'H');
serv.consoleWrite(m_Light, 'L');
std::cout << "--------------------" << std::endl;
}
}
线程(在默认构造函数中):
thread t1(&Scheduler::function<int,Temperature>, this, m_Tmp, objTemperature, "Logs/Temperature.log", 'T');
在这里......我没有看到我做错了什么......
解决方案
虽然严格来说这不是唯一的方法,但将线程的入口点包装在 lambda 中通常会使事情变得更加简单:
thread t1([this, objTemperature]{
function(m_Tmp, objTemperature, "Logs/Temperature.log", 'T');
});
推荐阅读
- php - mysql - 如何检查和回滚 mySql 查询
- python - ModuleNotFoundError:没有名为“twilio”的模块
- numpy - Numpy矢量化排除参数
- asp.net-core - 加载字体问题 ASP.NET Core 托管
- javascript - 如何使用线性渐变根据父级中的位置设置子级div背景颜色
- python - 在 Python Flask 上实时显示值
- matplotlib - 按下按钮时替换 Kivy 中的 DataFrame 图
- reactjs - React - UI 没有正确更新
- java - 模拟一个类和一个接口
- c++ - 为什么我的 C++ 代码没有执行 main() 函数?