如何使用另一个类中的公共成员函数作为参数调用线程
How to call thread with a public member function from another class as argument
我已经检查了使用成员函数和类似帖子启动线程,并按照说明进行操作,但是我收到此错误消息:
'std::invoke':未找到匹配的重载函数
SerialPort.h
#include <array>
#include <string>
class AudioClass
{
public:
void playAudio(std::array<std::string, 11> turretDetectionWavFiles, std::array<std::string, 6> turretActivationWavFiles,
std::array<std::string, 4> turretSearchingWavFiles, std::array<std::string, 16> turretPowerDownWavFiles, std::array<std::string, 3> turretAttackWavFiles, std::array<std::string, 11> turretMovedWavFiles,
std::array<std::string, 12> turretDie);
};
主.cpp
#include <iostream>
#include <array>
#include <string>
#include <thread>
#include "SerialPort.h"
std::array<std::string, 11> turretDetectionWavFiles{ "alarm.wav", "alert.wav", "active.wav", "turret_active_1.wav", "turret_active_2.wav", "turret_active_3.wav", "turret_active_4.wav", "turret_active_5.wav",
"turret_active_6.wav", "turret_active_7.wav", "turret_active_8.wav" };
std::array<std::string, 6> turretActivationWavFiles{ "turret_deploy_1.wav", "turret_deploy_2.wav", "turret_deploy_3.wav", "turret_deploy_4.wav", "turret_deploy_5.wav",
"turret_deploy_6.wav" };
std::array<std::string, 4> turretSearchingWavFiles{ "turret_search_1.wav", "turret_search_2.wav", "turret_search_3.wav", "turret_search_4.wav" };
std::array<std::string, 16> turretPowerDownWavFiles{ "turret_disabled_1.wav", "turret_disabled_2.wav", "turret_disabled_3.wav", "turret_disabled_4.wav", "turret_disabled_5.wav",
"turret_disabled_6.wav", "turret_disabled_7.wav", "turret_disabled_8.wav", "turret_retire_1.wav", "turret_retire_2.wav",
"turret_retire_3.wav", "turret_retire_4.wav", "turret_retire_5.wav", "turret_retire_6.wav", "turret_retire_7.wav", "retract.wav" };
std::array<std::string, 3> turretAttackWavFiles{ "turret_fire_4x_01.wav", "turret_fire_4x_02.wav", "turret_fire_4x_03.wav" };
std::array<std::string, 11> turretMovedWavFiles{ "turretlaunched10.wav", "turret_pickup_1.wav", "turret_pickup_2.wav", "turret_pickup_3.wav", "turret_pickup_4.wav", "turret_pickup_5.wav",
"turret_pickup_6.wav", "turret_pickup_7.wav", "turret_pickup_8.wav", "turret_pickup_9.wav", "turret_pickup_10.wav" };
std::array<std::string, 12> turretDie{ "sp_sabotage_factory_good_fail01.wav", "sp_sabotage_factory_good_fail04.wav", "sp_sabotage_factory_good_fail06.wav",
"sp_sabotage_factory_good_fail05.wav", "sp_sabotage_factory_good_fail07.wav", "turret_tipped_1", "turret_tipped_2", "turret_tipped_3",
"turret_tipped_4", "turret_tipped_5", "turret_tipped_6", "die.wav" };
void AudioClass::playAudio(std::array<std::string, 11> turretDetectionWavFiles, std::array<std::string, 6> turretActivationWavFiles,
std::array<std::string, 4> turretSearchingWavFiles, std::array<std::string, 16> turretPowerDownWavFiles, std::array<std::string, 3> turretAttackWavFiles, std::array<std::string, 11> turretMovedWavFiles,
std::array<std::string, 12> turretDie)
{
//do something
}
void exampleReceiveData()
{
std::thread t(AudioClass::playAudio, (turretDetectionWavFiles, turretActivationWavFiles, turretSearchingWavFiles, turretPowerDownWavFiles, turretAttackWavFiles, turretMovedWavFiles, turretDie));
}
int main()
{
exampleReceiveData();
}
我也尝试了这种方式,并得到了相同的错误:
std::thread t(&AudioClass::playAudio, AudioClass());
this指针需要作为第一个参数传递:
void exampleReceiveData(void)
{
AudioClass ac;
std::thread t(&AudioClass::playAudio, &ac, turretDetectionWavFiles,
turretActivationWavFiles, turretSearchingWavFiles,
turretPowerDownWavFiles, turretAttackWavFiles,
turretMovedWavFiles, turretDie);
t.join();
}
相关文章:
- static_assert在宏中,但也可以扩展到可以用作函数参数的东西
- C++中的高效循环缓冲区,它将被传递给C样式数组函数参数
- 当从函数参数中的临时值调用复制构造函数时
- 如何从"decltype()"获取函数参数的数量<funtion>?
- 如何将lambda作为模板类的成员函数参数
- 模板参数推导失败,函数参数/参数不匹配
- 如何在C++中将迭代器作为函数参数传递
- 将函数参数"const char*"转换为"std::string_view"是
- C++ 如何将数组值解压缩为函数参数
- 主函数参数的属性
- 具有两个间接寻址运算符 (C++) 的函数参数的用途
- "Warning: Comma within array index expression"但逗号分隔函数参数
- 如何定义在用作函数参数时工作的类模板的转换
- 将函数参数完美转发到函数指针:按值传递呢?
- 为什么我不能将引用作为 std::async 的函数参数传递
- 什么..(省略号)作为函数原型中唯一的函数参数,C++?
- 是否可以就地构造一个固定大小的数组作为函数参数?
- 接受模板作为函数参数
- 将成员函数作为构造函数参数调用时出错 "Variable is not a type name"
- Arduino 函数参数