2010-11-14 15 views
11

मैं सी ++ (या सी ++ 0x में) में एक पॉइंटर लिखना चाहता हूं, जो कक्षा के ऑपरेटर को इंगित करेगा कि ए या बी क्या ऐसा करने का कोई तरीका है?ऑपरेटरों को सी ++ पॉइंटर्स

बेशक वहाँ की तरह

int (A::*_p)(); 

एक वाक्य रचना है, लेकिन यह इस समस्या का समाधान नहीं है। मैं सामान्य सूचक बनाने के लिए, इसके लिए आधार वर्ग नहीं निर्दिष्ट करने चाहते हैं - केवल "ऑपरेटर समारोह"

#include <thread> 
#include <iostream> 

using namespace std; 

class A 
{ 
public: 
    int operator()() 
    { 
     return 10; 
    } 
}; 

class B 
{ 
public: 
    int operator()() 
    { 
     return 11; 
    } 
}; 

int main() 
{ 
A a; 
int (*_p)(); 
_p = a.operator(); 
cout << _p(); 

B b; 
_p = b.operator(); 
cout << _p(); 
} 

उत्तर

22

नहीं के लिए सूचक, यदि आप ऐसा नहीं कर सकते हैं। कक्षा का प्रकार ऑपरेटर सदस्य फ़ंक्शन के प्रकार का एक हिस्सा है।

A::operator()() का प्रकार B::operator()() के प्रकार से अलग है। पूर्व int (A::*)() का प्रकार है जबकि उत्तरार्द्ध int (B::*)() प्रकार है। वे प्रकार पूरी तरह से असंबंधित हैं।

निकटतम आप प्राप्त कर सकते हैं

C++ 0x बहुरूपी समारोह आवरण function (C++ 0x, सी ++ TR1, और बूस्ट में पाया) की तरह कुछ का उपयोग करके और bind का उपयोग कर एक वर्ग के लिए सदस्य समारोह सूचक बाध्य करने के लिए कर रहा है उदाहरण:

std::function<int()> _p; 

A a; 
_p = std::bind(&A::operator(), a); 
std::cout << _p(); 

B b; 
_p = std::bind(&B::operator(), b); 
std::cout << _p(); 
+0

आप से बहुत अधिक! यह वही है जो मैं खोज रहा था! :) –

संबंधित मुद्दे