正在转发参数
Forwarding arguments
我有一个形式为的构造
template<class T>
void do_something_with_it(T*&& ptr)
{
//here I can do something with this ptr
}
template<class T,class... Args>
void do_something_with_them(T*&& ptr, Args&&... args)
{
do_something_with_it(std::forward<T&&>(ptr));
do_something_with_them(std::forward<Args&&>(args)...);
}
但出于某种原因,我不能提出这些论点。有办法做到吗
我使用的是gcc 4.6.1。
很可能会出现编译时错误,因为T*&&
不是一个完美的转发工具。只有T&&
是。所以ptr
参数只接受右值。除此之外,你的std::forward<T&&>
应该是std::forward<T*>
,但当然,现在你有了另一个错误,这就无关紧要了。除了对do_something_with_them
的调用没有命中零参数的do_something_with_them
的基本情况之外,因为如果args
为空。。。
如果您真的只想接受指针,那么可以使用enable_if
和is_same
或is_convertible
。但我当然不认为这是"转发"了。呢
template<typename T, typename ...Args>
auto do_something_with_them(T&&t, Args&&...args)
-> decltype(do_something_with_it(std::forward<T>(t)))
{ ... }
通过这种方式,您可以让do_something_with_it
决定它是否接受参数(如果您愿意,您也可以将递归调用放入decltype
中。我把它留给读者练习,让读者了解这里可能需要什么运算符)。当然,do_something_with_it
也有同样的问题——不通用。
相关文章:
- 是否可以在不扣除的情况下将模板参数转发到 make_*?
- 可变参数模板参数转发使用逗号运算符
- 如何通过可变参数模板将多个构造函数参数转发到数组初始值设定项列表?
- 将可变参数函数参数转发到 std::function 对象
- 我如何实现变异模式以将可变数量的参数转发到C 11中的函数
- 无临时实例的参数转发
- 如何将构造函数参数转发到 boost::optional
- 如何使包装类将其构造函数参数转发到 std::vector 的构造函数?
- 如何将 CMake 参数转发到外部项目
- 使用std::forward而不是将参数转发到另一个函数
- 使用declard和参数转发构造函数隐式复制结构
- 将可变参数模板参数转发到多个类成员
- Template()的参数转发使构造函数参数变为常量
- 我怎样才能完美地将参数转发到 STL 集合
- 如何在 C++11 中使用可变参数模板正确创建显式参数转发函数
- 使用默认参数转发引用
- 将可变模板参数转发到类似printf的函数
- static_cast的参数转发
- Boost.Program_options:将"--"后面的参数转发到另一个程序
- 将参数转发给模板成员函数