对参数包中的每个元素应用函数
Apply function on each element in parameter pack
我有以下具有专用化的模板函数:
// Pass the argument through ...
template<typename T, typename U=T>
U convert(T&& t) {
return std::forward<T>(t);
}
// ... but convert std::strings
const char* convert(std::string s) {
return s.c_str();
}
如果我有一个可变参数模板函数,例如:
template<typename ... Args>
void doSomething(Args ... args) {
// Convert parameter pack using convert function above
// and call any other variadic templated function with
// the converted args.
}
有没有办法使用注释中的转换函数转换参数包?
我最初的目标是能够在类似 printf 的函数中将 std::string 传递给 '%s',而不必先在字符串上手动调用 .c_str()。但我也对一般感兴趣,如果这可以用简单的方式完成,到目前为止我的尝试失败了。
template<typename ... Args>
void doSomething(Args ... args) {
something(convert(args)...);
}
其中something(convert(args)...)
是扩展到以下内容的参数包扩展:
// pseudocode
something(convert(arg0), convert(arg1), convert(arg2), ...)
顺便说一句,您可能希望通过转发引用来args
以避免不必要的副本并正确传播左值引用:
template<typename... Args>
void doSomething(Args&& ... args) {
something(convert(std::forward<Args>(args))...);
}
相关文章:
- 如何在基类指针向量的元素上应用重载的多态函数
- C++函数,它将数组、谓词和运算符作为参数,并将运算符应用于满足谓词的数组元素
- 将函数应用于元组中的每个元素,将每个元素强制转换为类型包中的不同类型,然后作为参数包传递
- 将函数应用于特征矩阵中的所有元素,而无需循环
- 当我尝试将一个向量元素的值分配给另一个向量元素时,为什么我的应用程序会崩溃
- 如何在std :: tuple中的每个元素上应用constexpr函数
- 仅当元组中存在该类型时,将功能应用于元组元素
- 复制 std::vector,但将 lambda 应用于每个元素
- 内部源代码 - 在链接列表实现中插入元素上的删除会破坏整个应用程序
- 将二进制操作员应用于数组中的每个元素
- C 如何将函数应用于向量元素
- 对参数包中的每个元素应用函数
- 是否可以将std ::函数应用于特征矩阵的每个元素
- 将相同的功能应用于不同大小的N数组的每个元素
- 将函数应用于数组向量的元素
- 将函数应用于元组的每个元素
- C++有没有办法将函数'simultaneously'应用于向量的所有元素?
- 从另一个容器创建容器,在 C++ 中应用每个元素的某个函数
- C++用于将函数应用于连续元素的算法
- 将功能应用于数组中的每个元素