【发布时间】:2017-10-10 08:07:40
【问题描述】:
我怎样才能简化下面的代码。是否可以在这里使用元组?如果是的话,你能解释一下怎么做吗?
template<typename Out, typename T1, typename T2, typename T3, typename T4>
void ProcessIncomingCommand(PClientContext pClientContext,
DWORD & bytesProcessed,
const std::function<Out(T1, T2, T3, T4)> &function,
const std::vector<UINT> ¶ms);
template<typename Out, typename T1, typename T2, typename T3>
static void ProcessIncomingCommand(PClientContext pClientContext,
DWORD & bytesProcessed,
const std::function<Out(T1, T2, T3)> &function,
const std::vector<UINT> ¶ms);
template<typename Out, typename T1, typename T2>
static void ProcessIncomingCommand(PClientContext pClientContext,
DWORD & bytesProcessed,
const std::function<Out(T1, T2)> &function,
const std::vector<UINT> ¶ms);
需要在模板实现中调用带有std::vector 或UINT 传递的参数的函数。参数可能不同,因此需要将它们转换为正确的类型。
auto resFromFunction= function(params.at(0),
params.at(1),
static_cast<T3>(params.at(2)),
static_cast<T4>(params.at(3)));
我如何在这里使用log0 回答?
template<typename Out, typename... T>static void ProcessIncomingCommand(PClientContext pClientContext,
DWORD & bytesProcessed,
const std::function<Out(T...)> &function,
const std::vector<UINT> ¶ms)
【问题讨论】:
-
你真的想在这里做什么?这段代码的目的是什么?
-
元组会被用来做什么?
-
在实现中,我使用由 UINT 的向量传递的参数调用函数。 vector 中的类型可能与模板参数 (T...) 不同。我需要将它们转换为适当的类型。例如:function(static_cast
(params.at(0)), ... ) 等。在这里使用模板是否正确? -
请在问题帖子中指定参数应该做什么,您希望它如何简化,并尝试给minimal reproducible example
标签: c++ c++11 templates variadic-templates std-function