我怎样才能得到一个任意函数类型的arity作为一个模板参数?
这个函数可以是一个普通函数,一个lambda或一个仿函数。示例:
template<typename TFunc>
std::size_t getArity()
{
// ...?
}
template<typename TFunc>
void printArity(TFunc mFunc)
{
std::cout << "arity: " << getArity<TFunc>() << std::endl;
}
void testFunc(int) { }
int main()
{
printArity([](){}); // prints 0
printArity([&](int x, float y){}); // prints 2
printArity(testFunc); // prints 1
}
我可以访问所有C++14特性。
我必须为每个函数类型(以及所有相应的限定符)创建专门化吗?还是有更简单的方法?
2条答案
按热度按时间wxclj1h51#
假设我们正在讨论的所有
operator()
和函数都不是模板或重载:Demo。
vaqhlq812#
几年后,但看到我的完整(免费)解决方案here(生产级,完全文档化)。在您的情况下,您需要帮助模板“ArgCount_v”(在上面的链接中有完整的文档)。将其应用于您自己的代码(显示预期的结果-请参阅here):