2011-05-26 12 views
6

के रूप में विधियों को शामिल करता है मैं एक लीगे हैश मैप भरने की कोशिश कर रहा हूं जहां प्रत्येक प्रविष्टि में कुंजी के रूप में एक स्ट्रिंग होती है, और एक कार्य मूल्य के रूप में होता है। क्या यह संभव है? मैं बात की इस तरह हैं:गी हैशैप वैल्यू

var keybindings = new Gee.HashMap<string, function>(); 
keybindings.set ("<control>h", this.show_help()); 
keybindings.set ("<control>q", this.explode()); 

ताकि मैं अंत में कुछ इस तरह कर सकते हैं:

foreach (var entry in keybindings.entries) { 
    uint key_code; 
    Gdk.ModifierType accelerator_mods; 
    Gtk.accelerator_parse((string) entry.key, out key_code, out accelerator_mods);  
    accel_group.connect(key_code, accelerator_mods, Gtk.AccelFlags.VISIBLE, entry.value); 
} 

लेकिन शायद यह सबसे अच्छा तरीका नहीं है?

उत्तर

5

प्रतिनिधि जो आप खोज रहे हैं।

delegate void DelegateType(); 

private class DelegateWrapper { 
    public DelegateType d; 
    public DelegateWrapper(DelegateType d) { 
     this.d = d; 
    } 
} 

Gee.HashMap keybindings = new Gee.HashMap<string, DelegateWrapper>(); 
keybindings.set ("<control>h", new DelegateWrapper(this.show_help)); 
keybindings.set ("<control>q", new DelegateWrapper(this.explode)); 

//then connect like you normally would do: 
accel_group.connect(entry.value.d); 
+0

मुझे लगता है कि जेनरिक लागू किए गए हैं, या कम से कम [ट्यूटोरियल] (http://live.gnome.org/Vala/Tutorial#Generics) – Riazm

+0

में उनके साथ संबंधित एक अनुभाग है जिसका अर्थ है 'जेनेटिक प्रकार के रूप में प्रतिनिधियों का उपयोग करना तर्क 'समर्थित नहीं है, सामान्य रूप से जेनेरिक नहीं :) संपादित। – takoi

2

यह केवल [CCode (has_target = false)] के साथ प्रतिनिधियों के लिए संभव है, अन्यथा: लेकिन पिछली बार मैं जाँच की, जेनरिक प्रतिनिधियों का समर्थन नहीं किया है, तो एक नहीं तो सुरुचिपूर्ण जिस तरह से यह रैप करने के लिए है takoi सुझाव के रूप में आपको एक रैपर बनाना होगा।

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