Насчет странного синтаксиса. Поскольку наш объект только прикидывается функцией, а не является ей, то, похоже, полностью синтаксис функции получить не получится. Зато можно попробовать получить синтаксис указателя на функцию, переопределив operator*. Тогда все выглядит как обычный указатель на функцию: (*funcName)(arg1, arg2, ...)