0
4

1 回答 1

2

不,通用引用依赖于被推断为左值引用的模板参数。T不能是 中的左值引用T<U>&&,所以这不起作用。

可以工作的是使用T&&,并且使用 SFINAE 要求它匹配一些T<U>

template <template<int> class T, int U>
void foo_helper(const volatile T<U>&);

template <template<int> class T, int U>
void foo_helper(const volatile T<U>&&);

template <typename T, typename = decltype(foo_helper(std::declval<T>()))>
void foo(T&& param)
{
  cout << param.str << endl;
}

如果需要,您还可以提供帮助类型特征(如果foo要使用您的TU直接使用)。

于 2015-02-19T12:34:03.000 回答