Вот так я пишу в Си++...
Сам удивился, что это сработало...
Хотя можно было и с typedef...

void knight() { /* .... */ }

void (*x[])() = {
knight, bishop, rook, queen
};

char *getppc="kbrq";
void (*getpieceproc(char k)) () {
return x[strchr(getppc,k)-getppc];
}