为什么参考折叠不适用于
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
}
答案 0 :(得分:2)
不幸的是,您将使用某种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黑客相同的类型。