Liam0205 / liam0205.github.io

Deployment of my weblog.
https://liam0205.github.io
35 stars 5 forks source link

在 C++ 中解包 std::vector 作为函数参数 | 始终 #295

Open Liam0205 opened 5 years ago

Liam0205 commented 5 years ago

https://liam.page/2019/07/04/unpack-vector-as-parameters-for-functions/

昨天 jsteward 问我,有一个接受若干个同类型参数的函数 template <typename U, typename T> U func(T a, T b, T c),现在有一个 std::vector<T> args,希望将 std::vector<T> 当中的元素作为函数参数传进去,要怎么办。 这篇来解决这个问题。

luchangli03 commented 3 years ago

你好,能否只根据vector数组大小进行展开传递呢?因为有时候func是个指针,无法根据func来获取函数参数个数,函数返回值为void。

Liam0205 commented 3 years ago

@luchangli03 封在一个 functor 里应该可以。你试试,我没检验过

Maxing1997 commented 3 years ago

最后那个完整代码里103-105行写的有问题,

template <typename FuncType, typename VecType>
ReturnT unpack_caller(FuncType& func, VecType& args) {
  return details::do_call(func, args, BuildIndices<Traits::arity>());
}

ReturnT 没有定义

Liam0205 commented 3 years ago

@Maxing1997 你讲的对,fixed ✅

0xdddddddd commented 3 years ago

只针对了普通函数进行了包装,其实博主应该在对构造函数进行一次包装。这样就近乎完美了。

Liam0205 commented 3 years ago

@X-Crack 你可以搞一搞呀~ 回头我可以贴上来,然后感谢 X-Crack 补充~哈哈

0xdddddddd commented 3 years ago

没事没事,说说自己的想法,具体实现还是您动手。 :)