c++ - 如何在 C++ 中将模板类声明为友元

标签 c++

我想知道我们是否可以将部分特殊类作为 friend 类。

template< class A, class B >
class AB{};

class C;

template < class B >
class AB< C, B >{};

class D{
     template< class E > friend class AB< D, E >;
}

如何实现上述目标。

最佳答案

C++ 标准 (§14.5.3/9) 不允许这样做:

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]

所以基本上,您可以将 AB 的所有实例化为 D 的友元,或者仅将一个特定实例化。 This IBM page描述了在 friend 和模板方面可以实现的不同关系:“一对一”、“一对多”、“多对一”和“多对多”(但不是如您所问的“一对一”)。

关于c++ - 如何在 C++ 中将模板类声明为友元,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3736350/

相关文章:

c++ - 单个进程上的多个 SQLite 库

c++ - 当同一语句中有两个递归调用时,递归如何工作?

c++ - 什么是 ((ManifestItem*)manifest->currentItem())->fileContent = currentHtml();在cpp中是什么意思?

c++ - 使用不同类型的分隔符从.text文件读取输入

C++ 类构造和成员初始化

c++ - 名称与类方法冲突

c++ - 为什么所有现有的 C++ 编译器都不支持继承构造函数?

c++ - cv::Mat 外部数据在使用 cv::imdecode 后未被修改

c++ - 预分配 unordered_map 的线程安全

C++ 访问 friend 类->成员->公共(public)方法?