2010-09-15 3 views

ответ

14

Нет, они не могут. В проекте стандарта C++ 0x есть раздел (14.5.5) по частичным специализациям шаблонов классов, но не упоминается о частичных специализациях шаблонов функций.

+0

Это было мое понимание, что это в C++ 0x. – Puppy

+0

@DeadMG: Да, я имею в виду проект стандарта C++ 0x, http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3092.pdf –

+0

FYI: последний проект теперь [N3126] (http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3126.pdf) [Warning: Big PDF]. В последнем проекте ответ не отличается. –

-1

No; they were proposed as core language issue #229 (от n1295), но в конечном счете отклонил (и совершенно справедливо, так как перегрузка выполняет задание).

+16

Я не согласен с «совершенно справедливо». Перегрузка не всегда выполняется, поскольку мы не можем иметь перегрузки, которые отличаются только по типу возврата. Было бы хорошо, если бы я мог сделать что-то вроде следующего, например: шаблона <класса T, класса U> T & Foo() {...} шаблона недействительного Foo () {...} –

+0

Я согласен, что перегрузки недостаточно. Скажем, я хочу перегрузить std :: make_shared для устаревшей структуры C с пользовательскими функциями create_ * и destroy_ *. Частичная специализация была бы очень полезна в этом случае. – AndyJost

+3

Больше несогласия с «совершенно справедливо»: 'enable_if'. Если бы мы могли частично специализировать функции, мы могли бы избежать неуклюжих хаков с помощью тегов-помощников. – GreenScape

Смежные вопросы