我想知道以下棘手的情况是否可能:

假设我有一个模板类template <typename DTYPE> class A{};,其中DTYPE应该是uint8_tuint16_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/

10-16 05:08