C 商店功能和参数列表,供以后使用
c++ store function and parameter list for later use
所以我想通过在C 中编写一个小线池来挑战自己,我想尝试模仿STD :: thread与之使用的易于使用的方式,您可以创建它与诸如pthreads之类的内容相比,线程和参数发送该功能的函数和参数,这些函数迫使您将void*作为函数的唯一INDATA。
到目前为止以后的时间(当线程池中有一个免费线程时(。我尝试使用两个std ::函数与std :: tuple和std :: bind一起使用,但是由于我不知道我确切地处理哪种类型,所以我找不到一种存储函数和参数的方法这样我就可以在代码的另一部分中使用它们,因为那时我不再知道所有类型的内容。下面是我一直在处理的一些代码,这可能有助于表明我的意思。template<typename Function, typename... Arguments>
void TestFunction(Function func, Arguments... parameters)
{
std::function<std::result_of<Function(Arguments...)>::type(Arguments...)>* tempFunc;
tempFunc = new std::function<std::result_of<Function(Arguments...)>::type(Arguments...)>(func);
void* funcPtr = tempFunc;
std::tuple<Arguments...>* tempTuple;
tempTuple = new std::tuple<Arguments...>(parameters...);
void* tuplePtr = tempTuple;
//func(parameters...);
(Arguments...)>*)funcPtr, *(std::tuple<Arguments...>*)tuplePtr);
auto bindTest = std::bind(func, parameters...);
bindTest();
void* bindPtr = &bindTest;
}
int main()
{
TestFunction(std::printf, "%d, %d, %dn", 3, 2, 1);
getchar();
return 0;
}
可能是不可能做我想做的事,在这种情况下,我想我只需要更改更像Pthreads的方法。但是,如果有人知道解决问题,我会很感激。
关键是您可以存储std ::的返回类型bind bint a在std ::函数中。因为std :: bind返回一个可呼叫的对象。然后,您应该能够根据要处理返回类型的方式存储std ::功能实例。
template<typename Function, typename... Arguments>
void TestFunction(Function func, Arguments... parameters)
{
using Ret = typename std::result_of<Function>::type;
std::function<Ret()> val{std::bind(func, parameters...)};
}
如果您在第一次恢复功能时执行此操作,则不再需要考虑参数类型,而仅考虑返回类型。如何处理返回类型将取决于存储函数的用户酶。一种简单的方法是要求Function
是一个空隙函数,如果没有办法将值传递给API的消费者。
相关文章:
- 为什么每当我尝试运行此链接列表删除功能时都会收到分段错误错误?
- 如何使用 getter 功能push_back列表?
- 使用不遵循"严格弱排序"的比较功能对列表进行排序
- 我对C 中共享指针列表进行排序的功能未完成类型
- 为什么BOOST :: HANA :: EXAREMIS ::键入实验功能?类型列表的棘手是什么
- 如何使用字符串更改此插入功能以在链接列表中工作
- 使用for_each从对象列表中调用打印功能
- 双链接列表插入功能C
- 合并两个单链接列表以形成第三个列表的功能
- 调用STD ::功能,并带有变体类型列表
- 推送功能(将新节点添加到列表顶部)C
- C 商店功能和参数列表,供以后使用
- 特殊使用功能 - 两个列表的产品
- 可以在功能参数列表中多次使用函数模板的模板参数名称
- 在C 中实现链接列表类的临界功能
- POP_FROND双重链接列表功能问题
- Cygwin终端GDB列表功能不工作
- c++初始化列表功能:无需初始化成员即可调用函数
- 无限打印列表功能
- Visual Studio 2012 - 为什么统一初始化程序列表功能在 VS2012 中不起作用 C++.