Якое абгрунтаванне сінтаксісу, абранага для аб'яўлення сяброў шаблона?

Абвяшчэнне сябрам функцыі шаблона прадугледжвае нейкі неверагодна неінтуітыўны сінтаксіс, нават для C ++! Якое абгрунтаванне неабходнасці выбару сінтаксісу для дадатковага <> ? Ці не будзе больш сэнсам выкарыстоўваць ключавое слова ?

Для тых, хто пра гэта не ведае, вось прыклад таго, што вы можаце паспрабаваць зрабіць:

template <typename T>
class Foo
{
  int x;
  friend void bar(Foo<T>);
};

template <typename T>
void bar(Foo<T> f)
{
  std::cout << f.x;
}

Калі вы паспрабуеце каб выклікаць bar (Foo ()) , вы атрымаеце памылкі спасылкі.

Каб вырашыць гэта, вам трэба пераадрасаваць аб'яву bar (і, такім чынам, Foo ), а потым уставіць дзіўна размешчаны <> у дэкларацыі пра сяброў.

template <typename T> class Foo;
template <typename T> void bar(Foo<T>);

template <typename T>
class Foo
{
  int x;
  friend void bar<>(Foo<T>); // note the <> (!?)
};

template <typename T>
void bar(Foo<T> f)
{
    std::cout << f.x;
}

Маё пытанне: у чым аргументацыя сінтаксісу <> ? Ці не было б больш інтуітыўна выкарыстоўваць ключавое слова ці нешта падобнае?

EDIT: Каб удакладніць, я ўжо ведаю , чаму патрабуецца <> , я хачу ведаць, чаму яны вырашылі выкарыстаць <> для яго неадназначнасці замест нейкага іншага больш інтуітыўнага сінтаксісу.

9
задан Peter Alexander 23 July 2011 в 21:07
поделиться