我在我的 postscript 解释器中做了类似的事情。
这是来自我的操作员处理程序功能。它使用 switch 语句通过函数指针进行可变参数调用。
call: /* pass args bottom-up */
tos = siq; /* pop the stack to the 'stack in question' */
/* room for output? */
if (tos-os + op.sig[i].out > OSSIZE) error(st,stackoverflow);
switch (op.sig[i].n) {
case 0: op.sig[i].fp(st); break;
case 1: op.sig[i].fp(st, siq[0]); break;
case 2: op.sig[i].fp(st, siq[0], siq[1]); break;
case 3: op.sig[i].fp(st, siq[0], siq[1], siq[2]); break;
case 4: op.sig[i].fp(st, siq[0], siq[1], siq[2], siq[3]); break;
case 5: op.sig[i].fp(st, siq[0], siq[1], siq[2], siq[3], siq[4]); break;
case 6: op.sig[i].fp(st, siq[0], siq[1], siq[2], siq[3], siq[4], siq[5]); break;
default: error(st,unregistered);
}
我从Goswell 解释器(AKA Rutherford 解释器,AKA RALpage)那里借用了这种技术。