我希望有一个实用程序函数U,它在转换特定类型的参数后调用另一个函数F.参数的具体类型是vector<LibraryClass>
,这是固定的。转化是从vector<LibraryClass>
到special_vector<LibraryClass>
。
电话会是这样的:
vector<LibraryClass> a, c;
OtherType b, d, ...;
U(F, a, b, c, d, ...);
我希望以上内容相当于:
F(special_vector(a), b, special_vector(c), d, ...);
我真的想要的是一个非常简短的解决方案。你认为最简单的方法是什么?我只对方法而非代码感兴趣。
答案 0 :(得分:1)
充实Sam Varshavchik所说的
template<typename T>
T&& transform(T&& t) { return std::forward<T>(t); }
special_vector<LibraryClass> transform(const std::vector<LibraryClass>& v)
{
return {v};
}
template<typename Fn, typename... Args>
void U(Fn f, Args&&... args)
{
f(std::forward<Args>(transform(args))...);
}
您可能希望为transform(std::vector<LibraryClass>&&)
及其所有内容添加更多重载,或者在类型上添加SFINAE。