想象一下我们有这样的代码:
template <class, class>
class Element
{};
template <class T>
class Util
{
public:
template <class U>
using BeFriend = Element<T, U>;
};
是否可以标记BeFriend
作为一个朋友 ? (的Util
,或任何其他类)。
Edit
尝试了“明显的”语法,但在 Clang 3.6 中都失败了。
template <class> friend class BeFriend;
template <class> friend BeFriend;
我不知道第二种语法,但是在这个答案中找到了 https://stackoverflow.com/a/14623763/1027706。它似乎适用于(并且是必需的)non-template 别名,但在别名模板化的情况下没有帮助。
(Note:正如有些人可以从最小的示例中推断出的那样,我正在寻找一种方法来解决 C++ 不允许部分模板专业化的限制)
我认为你不能这样做,因为部分专业化不能声明为朋友。
从标准来看,[临时朋友]/7 http://eel.is/c++draft/temp.friend#7
友元声明不得声明部分特化。 [
例子:
template<class T> class A { };
class X {
template<class T> friend class A<T*>; // error
};
—结束示例]
您必须指定更通用的版本,例如:
template <class, class> friend class Element;
或完整指定版本,例如:
using BeFriend = Element<T, int>;
friend BeFriend;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)