मैं एक सूचक गुजर रहा एक समारोह टेम्पलेट में कार्य करने के लिए:std :: is_function समारोह के रूप में टेम्पलेट तर्क को नहीं पहचानता है
int f(int a) { return a+1; }
template<typename F>
void use(F f) {
static_assert(std::is_function<F>::value, "Function required");
}
int main() {
use(&f); // Plain f does not work either.
}
लेकिन टेम्पलेट तर्क F
is_function
द्वारा मान्यता प्राप्त नहीं है एक समारोह और स्थिर होने के लिए दावा विफल रहता है। कंपाइलर त्रुटि संदेश कहता है कि F
int(*)(int)
है जो कार्य करने के लिए एक सूचक है। ऐसा क्यों व्यवहार करता है? इस मामले में कार्य करने के लिए मैं फ़ंक्शन या पॉइंटर को कैसे पहचान सकता हूं?
मैं अंतर्निहित रूपांतरण :( –
* घृणा "(विडंबना यह है कि' std :: is_function> == झूठी: तो सूचक को दूर ';-))" * - शायद भविष्य के मानकों के लिए एक 'std :: is_callable' एक अच्छा विचार हो सकता है, क्योंकि' std :: is_function' lambdas के लिए भी काम नहीं करता है, केवल साधारण कार्य (और प्रत्येक कॉल करने योग्य समय था आधुनिक सी ++ में एक समारोह खत्म हो गया है)। –
@ क्रिस्टियन राउ 'std :: is_function' प्राथमिक वर्गीकरण लक्षणों में से एक है। 'is_callable' या ऐसा कुछ भी पूरी तरह से एक अलग उद्देश्य प्रदान करेगा। –