首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >包含方法作为值的Gee HashMap

包含方法作为值的Gee HashMap
EN

Stack Overflow用户
提问于 2011-05-27 06:00:14
回答 2查看 864关注 0票数 6

我正在尝试填充一个Libgee HashMap,其中每个条目都有一个字符串作为键,一个函数作为值。这个是可能的吗?我想要这样的东西:

代码语言:javascript
复制
var keybindings = new Gee.HashMap<string, function> ();
keybindings.set ("<control>h", this.show_help ());
keybindings.set ("<control>q", this.explode ());

所以我最终可以做这样的事情:

代码语言:javascript
复制
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);
}

但也许这不是最好的方式?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-05-27 07:24:23

委派就是你要找的。但据我所知,泛型不支持委托,所以一种不太优雅的方式是包装它:

代码语言:javascript
复制
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);
票数 5
EN

Stack Overflow用户

发布于 2011-05-29 03:24:04

只有具有CCode (has_target = false)的代理才有可能,否则您必须按照takoi的建议创建一个包装器。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6145635

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档