C++ 带Args的引用_包装器的类型推断

C++ 带Args的引用_包装器的类型推断,c++,template-argument-deduction,C++,Template Argument Deduction,我有一个模板函数: template<class... Args> void foo(Args&&... args) { boo<std::decay_t<Args>...>(std::forward<Args>(args)...); } 在第一种情况下,我调用boo,在第二种情况下,调用boo。 对于pack中的每个参数,是否有无明确使用get函数自动“取消引用”引用的方法? 原因是我想在第二种情况下调用boo,而不是b

我有一个模板函数:

template<class... Args>
void foo(Args&&... args)
{
    boo<std::decay_t<Args>...>(std::forward<Args>(args)...);
}
在第一种情况下,我调用
boo
,在第二种情况下,调用
boo
。 对于pack中的每个参数,是否有无明确使用
get
函数自动“取消引用”引用的方法?
原因是我想在第二种情况下调用
boo
,而不是
boo

您可以执行以下操作:

template <typename T> struct unwrap {
    using type = T;
};
template <typename T> struct unwrap<std::reference_wrapper<T>> {
    using type = T&;
};

template <typename T> using unwrap_t = typename unwrap<T>::type;

template<class... Args>
void foo(Args&&... args)
{
    boo<unwrap_t<std::decay_t<Args>>...>(std::forward<Args>(args)...);
}
模板结构展开{
使用类型=T;
};
模板结构展开{
使用type=T&;
};
使用展开的模板\u t=typename展开::type;
模板
void foo(Args&&…Args)
{

boo您可能会执行以下操作:

template <typename T> struct unwrap {
    using type = T;
};
template <typename T> struct unwrap<std::reference_wrapper<T>> {
    using type = T&;
};

template <typename T> using unwrap_t = typename unwrap<T>::type;

template<class... Args>
void foo(Args&&... args)
{
    boo<unwrap_t<std::decay_t<Args>>...>(std::forward<Args>(args)...);
}
模板结构展开{
使用类型=T;
};
模板结构展开{
使用type=T&;
};
使用展开的模板\u t=typename展开::type;
模板
void foo(Args&&…Args)
{

boowow。使用模板真是太棒了。从来没有想到模板类可以在内部有一个别名作为嵌套类型。这是的传统方式。哇。使用模板真是太棒了。从来没有想到模板类可以在内部有一个别名作为嵌套类型。这是的传统方式。