C++ 17將有一個Callable
的概念,我想知道什麼是std::is_function<T>::value
是true
類型的確切區別。它們是否相同?一個是另一個的超集嗎?Callable概念和std :: is_function類型特徵之間有什麼區別?
回答
C++ 17將有
Callable
概念
它的存在,因爲在C++ 11的標準。
它們是否等同?一個是另一個的超集嗎?
不,實際上它們是完全不相交的。 Callable
僅適用於對象類型,幷包含從指針到成員的所有內容,以及帶有重載operator()
的類型,並將其隱式轉換爲指向函數指針本身的函數指針。
is_function
僅適用於實際功能類型,根據定義,該功能類型不是對象類型。
'Callable'不適用於函數嗎? –
@NeilKirk不,不符合標準。請參見[\ [func.wrap.func \]/2](http://eel.is/c++draft/func.wrap.func#2)(「F類型的可調用對象f是Callable ... 「),[\ [func.def \]/3-4](http://eel.is/c++draft/function.objects#func.def-3)(」可調用類型是函數對象類型或一個指向成員的指針,一個可調用對象是一個可調用類型的對象「),和[\ [function.objects \]/1](http://eel.is/c++draft/function.objects# 1)(「函數對象類型是可以作爲函數調用中的後綴表達式的類型的對象類型」) –
LWG [可能調整這裏的措辭](http://wg21.link/lwg2393 ),但不會影響這個答案(除了可能將'Callable'重命名爲'Lvalue-Callable')。 –
- 1. 領域模型和概念模型之間有什麼區別
- 2. 特徵和多重繼承之間有什麼概念上的區別?
- 3. 「類型」,「實例」,「類」和「對象」概念之間的區別
- 4. C#參考類型和「可變」概念之間的區別?
- 5. 在記錄Level.INFO和Level.DEBUG之間的概念區別是什麼
- 6. bin和gen之間的概念區別是什麼?
- 7. 軟件開發中的模型和圖之間的概念區別是什麼
- 8. 概念數據模型和ER圖之間的區別是什麼?
- 9. Interop和RCW(Runtime Callable Wrapper)之間有什麼區別?
- 10. 特徵工程和特徵提取有什麼區別?
- 11. Highland.js,Kefir.js和Rx.js之間的區別特徵是什麼?
- 12. C++ std :: lock和std :: unique_lock之間有什麼區別?
- 13. std :: strtol和std :: stoi之間有什麼區別?
- 14. std :: condition_variable和std :: condition_variable_any之間有什麼區別?
- 15. -std = C++ 11和-std = gnu ++ 11之間有什麼區別?
- 16. 聽衆和觀察者之間有概念上的區別嗎?
- 17. skos:ConceptScheme和skos:Collection之間有什麼區別?
- 18. 邏輯數據模型和概念數據模型有什麼區別?
- 19. 領域模型,概念模型和商業模型等之間的區別
- 20. UI之間真正的概念區別是什麼:裝飾和UI:包括?
- 21. maven中的繼承和子模塊概念有什麼區別?
- 22. C++概念和界面有什麼區別?
- 23. 'class'和'type'的概念有什麼區別?
- 24. C++ 0x概念和c#約束有什麼區別?
- 25. Tensorflow:具有多個特徵列和具有多個維度的一個特徵列之間有什麼區別?
- 26. @Endpoint和@WebService之間有什麼區別?
- 27. (類型)值和類型(值)之間的區別是什麼?
- 28. 概念UML類圖與ERD之間的區別?
- 29. std :: transform和std :: for_each有什麼區別?
- 30. std :: function和std :: mem_fn有什麼區別
好吧,重載'operator()'的對象是可調用的,但不是函數 –
@ M.M我想問題在於名稱。函數*是可調用的,但函數對象也是如此。這太糟糕了,沒有一個更好的名字......? – VermillionAzure