Абвяшчэнне сябрам функцыі шаблона прадугледжвае нейкі неверагодна неінтуітыўны сінтаксіс, нават для 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: Каб удакладніць, я ўжо ведаю , чаму патрабуецца <> , я хачу ведаць, чаму яны вырашылі выкарыстаць <> для яго неадназначнасці замест нейкага іншага больш інтуітыўнага сінтаксісу.