[ ReturnType, ...ArgTypes, Imp | Imp == CCodePointer[(Id, SEL, ...ArgTypes), ReturnType] ] addMethod( class, selector: Selector[ReturnType, ...ArgTypes], imp: Imp ) { class_addMethod( class, selector.sel, RawPointer(imp), cstring(encode(ReturnType, Id, SEL, ...ArgTypes)) ); }