gpt4 book ai didi

c++ - 是否可以将别名模板标记为好友?

转载 作者:可可西里 更新时间:2023-11-01 15:56:49 26 4
gpt4 key购买 nike

假设我们有这样的代码:

template <class, class>
class Element
{};

template <class T>
class Util
{
public:
template <class U>
using BeFriend = Element<T, U>;
};

是否可以将 BeFriend 标记为 friend ? (Util 或任何其他类)。

编辑

尝试了“明显”的语法,但在 Clang 3.6 中都失败了。

template <class> friend class BeFriend;
template <class> friend BeFriend;

我不知道第二种语法,但是found it in this answer .它似乎适用于(并且是必需的)-模板别名,但在别名被模板化的情况下无济于事。

(注意:正如某些人可以从最小示例推断的那样,我正在寻找一种方法来解决 C++ 不允许将部分模板特化作为友元的限制)

最佳答案

我认为你不能那样做,因为部分特化不能声明为友元。

来自标准,[temp.friend]/7

Friend declarations shall not declare partial specializations. [ Example:

template<class T> class A { };
class X {
template<class T> friend class A<T*>; // error
};

—end example ]

您必须指定一个更通用的版本,例如:

template <class, class> friend class Element;

或完整的指定版本,例如:

using BeFriend = Element<T, int>;
friend BeFriend;

关于c++ - 是否可以将别名模板标记为好友?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33563427/

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