假设我将Handler类定义为
class Handler {public: class Message { /*...*/ }; typedef int (*Callback)(Message *msg); voID registerCallback(int msgclass,Callback f);};
客户可以做到
int f1(Handler::Message *msg){ /* handle message */ }int f2(Handler::Message *msg){ /* handle message */ }int main(){ Handler h; h.registerCallback(1,f1); h.registerCallback(2,f2); // ....}
编译器确实会检查f1和f2是否适合作为registerCallback的参数,但是,由客户端来正确定义f1和f2.由于我已经完成了typedefed Callback,我希望客户能够使用它.
结束编辑
我想做这样的事情:
typedef int arithmetic(int i,int j);arithmetic sum{ return i+j;}arithmetic max{ return (i>j)? i:j;}// etc.
但是,两者都有
arithmetic sumarithmetic sum()
不编译,也是这个
arithmetic sum(int i,int j)
这给了编译器错误
func.cpp:4: error: ‘sum’ declared as
function returning a function
我想要这个的原因是我想要一个Handler类,它为它接受的回调函数提供一个typedef,包括参数列表.
解决方法 首先,你没有输入一个签名.签名是标识单个功能的所有内容.它包含函数的名称空间/类等.你输入的是函数的类型.就像你在typedef int inttype中键入int类型一样,你可以键入定义函数的类型.
您可以使用typedef-name仅声明函数.
arithmetic max; // valID
但它不能用于定义函数.要定义函数,您需要按字面和手动提供参数列表.原因包括给出参数的名称(以及可能的其他更多技术原因.C 0x引入算术max {};这将获得特定的初始化含义).
总结以上是内存溢出为你收集整理的c – typedef’ing函数*签名*(不是指针),以便它可以重用?全部内容,希望文章能够帮你解决c – typedef’ing函数*签名*(不是指针),以便它可以重用?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)