如何将参数包存储为成员
How to store parameter pack as members
所以我读了这个线程:C++如何将参数包存储为变量
这个答案并没有真正帮助我(我不确定如何实现它)
我试图创建的是一个有参数的Thread类,按照我目前的做法,参数需要能够存储为成员,以便传递到成员函数中。
这是我当前的Thread类:(我希望所有的FuncArg都能存储为成员,这样它们就可以传递给Run中的成员函数)
template<class _Ty, typename...FuncArgs>
class YThread
{
private:
typedef YVoid(_Ty::* YMethod)();
HANDLE _myThread_handle;
DWORD _myThread_id;
_Ty* _myObject;
YMethod _myMethod;
private:
static YVoid Run(YPointer thread_obj)
{
YThread<_Ty>* thread = (YThread<_Ty>*)thread_obj;
thread->_myObject->*thread->_myMethod();
}
YThread(const YThread<_Ty>& Other) = delete;
YThread<_Ty>& operator=(const YThread<_Ty>& other) = delete;
public: // Starters
YThread()
{}
YThread(_Ty* object, YVoid(_Ty::* method)())
{
_myObject = object;
_myMethod = method;
Start();
}
~YThread()
{
if (_myThread_handle)
CloseHandle(_myThread_handle);
}
YBool Start()
{
_myThread_handle = CreateThread(
0, 0,
(LPTHREAD_START_ROUTINE)YThread<_Ty>::Run,
this,
0, &_myThread_id);
}
YBool Start(_Ty* object, YVoid(_Ty::* method)())
{
_myObject = object;
_myMethod = method;
Start();
}
public: // Other
YVoid Kill()
{
TerminateThread(_myThread_handle, 0);
}
YVoid Join()
{
WaitForSingleObject(_myThread_handle, INFINITE);
}
YBool is_alive()
{
DWORD exitCode = 0;
if (_myThread_handle)
GetExitCodeThread(_myThread_handle, &exitCode);
if (exitCode == STILL_ACTIVE)
return true;
return false;
}
};
我认为你这样做是出于教育目的——否则,我强烈建议你停止重新发明轮子,按照自然的意图使用std::thread
。
话虽如此,也许是这样的:
class YThread {
std::function<void()> thing_to_run;
public:
template<class Ty, typename... FuncArgs>
YThread(Ty* object, YVoid(Ty::* method)(FuncArgs...),
FuncArgs&&... args) {
thing_to_run = [=](){ (object->*method)(std::forward<FuncArgs>(args)...); };
}
// When it comes time to actually run the method, just do
// thing_to_run();
};
相关文章:
- 访问存储在向量C++中的结构的多态成员
- 如何创建存储指向成员函数的指针的类 (C++)
- 哪些存储了不完整类型的 STL 数据结构可以用作类成员?
- 使用成员函数和存储值定义书籍类
- 指向(数据)成员的指针作为非类型模板参数,例如具有自动存储持续时间/无链接
- 在C++中,如果成员引用在其声明中初始化,为什么需要存储空间?
- 通过放置 new 重用数据成员存储
- 如何将提升正常分发存储为类成员
- C++:将未知类型的对象存储为成员变量的类
- structtm是否将时区信息存储为其数据成员
- 是否值得使用位移在单个字节中存储多个小数据成员?
- 将列表迭代器存储为成员
- 是否有更好的方法来封装成员对象可以访问的共享存储池?
- 流的奇怪问题.不能存储具有特定值的成员变量的对象
- 不从成员函数C 存储返回值认为不良习惯
- 在数据结构中存储成员函数
- 如何通过接口存储成员函数指针
- 存储成员指针与成员值
- 存储成员函数的位置
- GCC如何在内存中存储成员函数