gpt4 book ai didi

c++ - 引用与模板模板类折叠

转载 作者:太空狗 更新时间:2023-10-29 21:45:27 25 4
gpt4 key购买 nike

为什么引用折叠不适用于

template<typename T, template<typename> class C>
void f(C<T> && x); // x declaration is an rvalue!

我如何完美前向以及如何避免重载 const lvalue ref、lvalue ref、rvalue ref 的所有组合

template<typename T> // not necessary a template template class here
void f(C<T>, C<T>, C<T>, ..., C<T>)
{
// do something with T
// move or copy arguments to a function
}

最佳答案

不幸的是,您将需要使用某种 SFINAE

template<typename T>
struct HasOneTypeParam : std::false_type { };

template<typename T, template<typename> class C>
struct HasOneTypeParam<C<T>> : std::true_type { };

template<typename ...T>
struct SlurpThemAll { typedef int type; };

template<typename ...T,
typename SlurpThemAll<
bool[HasOneTypeParam<typename std::decay<T>::type>::value * 2 - 1]...
>::type = 0>
void f(T &&... x);

根据您实际想要执行的操作,您可以要求所有 std::decay<T>::type与更多 SFINAE hacks 相同的类型。

关于c++ - 引用与模板模板类折叠,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17662527/

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