Сейчас я использую этот код:
size_t argc(std::function<Foo()>)
{ return 0; }
size_t argc(std::function<Foo(Bar)>)
{ return 1; }
size_t argc(std::function<Foo(Bar, Bar)>)
{ return 2; }
size_t argc(std::function<Foo(Bar, Bar, Bar)>)
{ return 3; }
// ...
Но он довольно уродлив и ограничен (пользователь не может вызвать argc
с функцией с любым количеством аргументов). Есть ли лучший способ сделать это?
Примечание: тип возврата и тип аргумента всегда одинаковы. Я знаю, что могу использовать шаблоны для принятия любого типа, но мне это не нужно.