C++標準沒有定義「概念」。它定義了「requirementes」like:
EqualityComparable, LessThanComparable, DefaultConstructible,
MoveConstructible, CopyConstructible, MoveAssignable, CopyAssignable,
Destructible, NullablePointer, Hash, TrivialClock, Allocator,
Swappable or Container
但是有些要求使用不同於其他語法的語法。例如,allocator
和swappable
使用小寫斜體(分配器),和其他人從我的樣本列表中駝峯寬字體,或者,如在標準中描述的,用恆定類型(EqualityComparable
)。
其他「概念」,如PODType
,在標準中被視爲定義。
例如,BinaryPredicate
未被定義爲概念或定義;只是作爲功能的模板名稱使用它:
void unique();
template <class BinaryPredicate> void unique(BinaryPredicate pred);
影響:擦除所有而是從由迭代i
中的量,範圍[first + 1,last)
稱爲 相等的元素的每個連續組的第一個元素*i == *(i-1)
(對於沒有 參數的版本)或pred(*i, *(i - 1))
(對於具有謂詞參數的版本)成立。僅對迭代器和對已擦除元素的引用使 無效。
拋出:除非通過相等比較或謂詞拋出異常,否則什麼也不做。
複雜度:如果範圍[first,last)
不爲空,則應用恰好對應的謂詞,否則沒有應用謂詞。
如您所見,未定義BinaryPredicate
。它只是顯示它如何影響std::unique
的行爲。
另一方面,cppreference概念列表是從概念提取的,這是非標準的。此外,cppreference
並不完美,從概念提案的角度來看,並非每個wiki頁面都是完整的或完整的描述,還有其他模板參數甚至不出現在標準中,如UnaryOperator
。
cppreference記錄了其中的一些,而不是其他人。我認爲你正在推翻它。 –
'UnaryPredicate'似乎至少是'Predicate'的同義詞。 – StoryTeller
'BinaryPredicate'是在實際的C++標準中使用和定義的術語/類型名稱(參見[本草案]第25.1節第9段)(http://www.open-std.org/jtc1/sc22/wg21/文檔/文件/ 2013/n3690.pdf))。但是,標準中不會出現「UnaryPredicate」和「UnaryFunction」這兩個術語。標準中使用'BinaryOperation'和'UnaryOperation',但沒有像BinaryPredicate那樣明確定義。 – Cornstalks