Как объявить шаблонную структуру / класс своим другом? - PullRequest
51 голосов
/ 20 июля 2010

Я бы хотел сделать следующее:

template <typename T>
struct foo
{
    template <typename S>
    friend struct foo<S>;

private:
    // ...
};

но мой компилятор (VC8) захлебнулся:

error C3857: 'foo<T>': multiple template parameter lists are not allowed

Я хотел бы иметь все возможные экземпляры template struct foo друзей foo<T> для всех T.

Как мне сделать эту работу?

РЕДАКТИРОВАТЬ: Это

template <typename T>
struct foo
{
    template <typename>
    friend struct foo;

private:
    // ...
};

, кажется, компилируется, но правильно ли это? Друзья и шаблоны имеют очень неестественный синтаксис.

1 Ответ

83 голосов
/ 20 июля 2010
template<typename> friend class foo

однако все шаблоны подружатся друг с другом.Но я думаю, это то, что вы хотите?

...