के साथ काम नहीं कर रहा है, मैं एक शून्य * चर में एक फ़ंक्शन पॉइंटर डालने की पुनरावृत्ति करना चाहता हूं। फ़ंक्शन पॉइंटर का प्रकार Class* (*)(void*)
प्रकार का होगा।vin to reodeterpret_cast * फ़ंक्शन पॉइंटर्स
नीचे नमूना कोड,
class Test
{
int a;
};
int main()
{
Test* *p(void **a);
void *f=reinterpret_cast<void*>(p);
}
ऊपर कोड दृश्य स्टूडियो/86 compilers के साथ अच्छी तरह से काम करता है। लेकिन एआरएम कंपाइलर के साथ, यह संकलन त्रुटि देता है। पता नहीं क्यों।
Error: #694: reinterpret_cast cannot cast away const or other type qualifiers
मैं में Casting a function pointer to another type
मैं नीचे विवरण के बारे में चिंतित था विवरण पढ़ें।
Casting between function pointers and regular pointers (e.g. casting a
void (*)(void)
to avoid*
). Function pointers aren't necessarily the same size as regular pointers, since on some architectures they might contain extra contextual information. This will probably work ok on x86, but remember that it's undefined behavior.
कैसे प्रभावी ढंग से void (*)(void*) -> void*
से इस तरह के रूपांतरण करने के लिए इतना है कि कम से कम यह compilers के अधिकांश में लगभग एक ही संकलित?
आपको कम से कम एक जोर देना चाहिए कि 'आकार (शून्य *)> = आकार (टेस्ट ** (*) (शून्य **)) '। यदि यह जोर विफल रहता है, तो स्पष्ट रूप से फ़ंक्शन पॉइंटर को 'शून्य *' में संग्रहीत करने का कोई तरीका नहीं है। अगर जोर विफल नहीं होता है, तो यह अभी भी कुछ भी गारंटी नहीं देता है, लेकिन कम से कम यह संभव है कि कलाकार काम कर सके। –
ध्यान दें कि पी वास्तव में टाइप टेस्ट ** (शून्य **) है, और एक फ़ंक्शन है, फ़ंक्शन पॉइंटर नहीं। "टेस्ट * *' "में एक जगह डालने से पार्सिंग प्रभावित नहीं होती है। – MSalters