gpt4 book ai didi

c++ - 如何将可变参数模板参数转换为另一种类型以调用另一个函数?

转载 作者:行者123 更新时间:2023-11-30 02:25:55 25 4
gpt4 key购买 nike

函数 f 接收可以使用 transform 函数转换为 Wrapper 的参数,它必须调用 f2f2 接收可变数量的 Wrapper 类参数。

template <typename T>
Wrapper transform(T&& value) {
return Wrapper(std::forward<T>(value));
}

template <typename... Args>
Wrapper f2(Args&&... args) {
// All arguments must be Wrappers
// More code
}

template <typename... Args>
Wrapper f(Args&&... args) {
// Arguments can be transform to Wrapper using a transform function.
return f2( /* For each arg in args -> transform(std::forward<Args>(args)...)*/ ); // Problem!
}

通常是先转换参数,然后直接调用f2,但我不想将transform函数公开。

有没有办法在不公开transform函数的情况下实现这一点?

最佳答案

包扩展可以应用于任意复杂的表达式。在这里:

return  f2( /* For each arg in args -> transform(std::forward<Args>(args)...)*/ ); // Problem!

问题是你在 transform内部展开...这相当于编写 f2(transform(a0, a1, a2, . .., aN))。希望很清楚为什么这是错误的。您希望要扩展的表达式包含 转换。即:

return  f2(transform(std::forward<Args>(args))...);

扩展为 f2(transform(a0), transform(a1), ..., transform(aN))

关于c++ - 如何将可变参数模板参数转换为另一种类型以调用另一个函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43553585/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com