मैं सिर्फ किताब "प्रैक्टिकल सी ++ Metaprogramming" पढ़ सकते हैं और यह निम्न उदाहरण है कि मैं संकलन नहीं कर सकता है। क्या आप इसे मेरे लिए हल करने में मदद कर सकते हैं।प्रैक्टिकल सी ++ Metaprogramming
template <typename F>
struct make_tuple_of_params;
template <typename Ret, typename... Args>
struct make_tuple_of_params<Ret (Args...)>
{
using type = std::tuple<Args...>;
};
template <typename F>
using make_tuple_of_params_t = typename make_tuple_of_params<F>::type;
template<typename F>
void some_magic_function(F callable)
{
make_tuple_of_params_t<F> tuple;
/*
... do something with arguments in tuple...
*/
}
int main()
{
some_magic_function([] (int, double, float) {});
}
मैं कह रहा एक संकलन त्रुटि मिलती है: 'प्रकार' 'make_tuple_of_params' के किसी भी प्रत्यक्ष या अप्रत्यक्ष आधार वर्ग का सदस्य नहीं है। यह SFINAE की तरह सीम की अपेक्षा की जाती है क्योंकि डिफ़ॉल्ट संरचना का चयन किया जाता है। मैं यह कैसे तय करुं?
एक लैम्ब्डा प्रकार एक समारोह प्रकार नहीं है। – aschepler
ध्यान रखें कि C++ 14 में lambdas में 'auto' पैरामीटर हो सकते हैं जिन्हें स्पष्ट रूप से टेम्पलेट किए गए फ़ैक्टर के रूप में माना जा सकता है। इस प्रकार के लैम्बडास के लिए आप अपने ट्यूपल प्रकार को समान रूप से क्या उम्मीद करेंगे? –
कोई SFINAE, ऊपर है बस विशेषज्ञता टेम्पलेट – Yakk