原文
C++
版:
struct R { }; // typedef void (* Fn) (R &); // 指针版本. typedef void (& Fn) (R &); //这里可以自定义函数类型,不错. template<Fn f> static void lyr (R &r) { // 调用 f } static void foo (R &r) { } static const std::map<std::string, Fn> reg = { {"foo", &foo}, {"lfoo", &lyr<foo>} // 函数模板. };//指针版本 static const std::map<std::string, Fn> reg = { {"foo", foo}, {"lfoo", lyr<foo>} // 这样也可以. };
D版
:
struct R {} void lyr(alias Fn)(ref R r) { Fn(r); } void foo(ref R r) { } static immutable void function(ref R)[string] reg; shared static this() { // 缺少编译时AA初化的解决方式 reg = [ "foo": &foo, "lfoo": &lyr!foo, ]; }