问问题
69 次
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
要使用您的T
或U
直接使用)。
于 2015-02-19T12:34:03.000 回答