使用模板转换特定类型的参数

时间:2017-10-20 02:29:41

标签: c++ c++11 templates

我希望有一个实用程序函数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, ...);

我真的想要的是一个非常简短的解决方案。你认为最简单的方法是什么?我只对方法而非代码感兴趣。

1 个答案:

答案 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。