我如何简化下面的代码。这里有可能使用元组吗?如果是,您能解释一下。
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)
不确定...但是我想您需要一个功能助手和std::index_sequence
(或类似的东西)。
一个可能的例子
template <typename Out, typename ... Ts, std::size_t ... Is>
static Out PIC_helper (
PClientContext pClientContext,
DWORD & bytesProcessed,
const std::function<Out(Ts...)> &function,
const std::vector<UINT> ¶ms,
std::index_sequence<Is...> const &)
{ return function( static_cast<Ts>(params.at(Is))... ); }
template <typename Out, typename ... Ts>
static void ProcessIncomingCommand (
PClientContext pClientContext,
DWORD & bytesProcessed,
const std::function<Out(Ts...)> &function,
const std::vector<UINT> ¶ms)
{
Out resFromFunction
= PIC_helper(pClientContext, bytesProcessed, function, params,
std::make_index_sequence<sizeof...(Ts)>());
// other ...
}
观察到std::index_sequence
,这std::make_index_sequence()
是C ++ 14的功能;但是,如果您需要C ++ 11解决方案,则可以轻松创建一些东西来替代它们。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句