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

标签 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, ...);

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

最佳答案

充实什么 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/

相关文章:

c++ - 使用 QVTK 在 Qt 中进行 PCL 可视化

c++ - 提供基类(或不可复制)和虚拟继承的类型

c++ - Armadillo 初始值设定项列表不起作用

c++ - 指定模板参数

C++ 相关名称 : Is this typename required?

c++ - 如何使用 http ://www. opengl-tutorial.org/正确学习 OpenGL?

c++ - QUdpSocket。如何获取发件人的IP地址?

c++ - OpenGL 应用程序退出,退出代码为 -1073741515 (0xC0000135)

templates - Playframework : Looping over a list

c++ - std::uniform_real_distribution 包含范围