在查找有關 std::function 的檔案時,我發現了幾頁,列出了 C 11 的 std::function 的兩個實作:
- https://en.cppreference.com/w/cpp/utility/functional/function
template< class > class function; /* undefined */ template< class R, class... Args > class function<R(Args...)>;
- https://www.tutorialspoint.com/cpp_standard_library/functional.htm,
template <class T> function; // undefined template <class Ret, class... Args> class function<Ret(Args...)>;
- https://cplusplus.com/reference/functional/function/
template<class > class function;和
template< class R, class... Args > class function<R(Args...)>
我嘗試使用函式<>-模板的多引數版本,但我的代碼無法編譯,無論是使用 Visual c 2017,還是使用 XCode 或 g 。這是我的示例代碼:
#include <functional>
int main(int argc, char*argv[])
{
std::function<void, int> cb;
}
所有編譯器都抱怨 std::function 只采用一個模板引數。
有人可以解釋一下嗎?
uj5u.com熱心網友回復:
的模板引數串列std::function具有單一型別,如基本模板所示:
template <class>
class function;
您在以下內容中看到的內容:
template <class ReturnType, class... Arguments>
class function<ReturnType(Arguments...)>
{
...
};
是一種偏特化,其中提到的型別用于模式匹配。本質上,專業說:
“std::function基礎模板中提到的那個單一型別的型別是一個可呼叫的型別,帶有這樣的 aReturnType和這樣ArgumentType的 s
uj5u.com熱心網友回復:
列出了 C 11 的 std::function 的兩個實作:
不,他們沒有。這根本不是他們所展示的。
template< class >
class function; /* undefined */
是基本模板,它(如它所說)從未定義過。
例如,std::function<int>永遠不會有意義,因此根本沒有定義可以匹配該模式的模板。
template< class R, class... Args >
class function<R(Args...)>;
是部分專業化。
也就是說,只有在具有形式時才std::function<T>被定義,意思是回傳和接受引數的函式的型別。TR(Args...)TRArgs...
因此,您的嘗試應該是std::function<void(int)> cb;......完全如您鏈接的 cppreference 頁面底部的大量示例所示。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/513374.html
標籤:C c 11
