我想要一个效用函数 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, ...);
我真正想要的是一个非常简短的解决方案。你认为实现这个最简单的方法是什么?我只对方法感兴趣,对代码不感兴趣。
最佳答案
充实什么 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。
关于c++ - 使用模板转换特定类型的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46841546/