我想知道以下棘手的情况是否可能:
假设我有一个模板类template <typename DTYPE> class A{};
,其中DTYPE
应该是uint8_t
,uint16_t
等之一。我想向A
添加一个 friend 类,但是对于每个DTYPE
替代品,此 friend 类都不同。此外,假设不同DTYPE
值的 friend 类是另一个模板类的而不是实例,而是独立的类。
有办法吗?
最佳答案
您可以添加模板“proxy”类FriendOfA
并将其专用于所需的任何类型:
// actual friends
class FriendUint8 {};
class FriendUint16 {};
template<typename T> struct FriendOfA;
template<>
struct FriendOfA<uint8_t> {
typedef FriendUint8 type;
};
template<>
struct FriendOfA<uint16_t> {
typedef FriendUint16 type;
};
// optional helper
template <typename T>
using FriendOfA_t = typename FriendOfA<T>::type;
template<class T>
class A {
friend typename FriendOfA<T>::type;
// or simply
friend FriendOfA_t<T>;
};
关于c++ - 我们可以基于模板参数添加 friend 类吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25867903/