gpt4 book ai didi

c++ - 从模板参数中获取函数参数

转载 作者:可可西里 更新时间:2023-11-01 16:01:33 25 4
gpt4 key购买 nike

如何获取用作模板参数的任意函数类型的元数?

函数可以是普通函数、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 功能。

我是否必须为每个函数类型(以及所有相应的限定符)创建特化?或者有更简单的方法吗?

最佳答案

假设我们讨论的所有 operator() 和函数都不是模板或重载:

template <typename T>
struct get_arity : get_arity<decltype(&T::operator())> {};
template <typename R, typename... Args>
struct get_arity<R(*)(Args...)> : std::integral_constant<unsigned, sizeof...(Args)> {};
// Possibly add specialization for variadic functions
// Member functions:
template <typename R, typename C, typename... Args>
struct get_arity<R(C::*)(Args...)> :
std::integral_constant<unsigned, sizeof...(Args)> {};
template <typename R, typename C, typename... Args>
struct get_arity<R(C::*)(Args...) const> :
std::integral_constant<unsigned, sizeof...(Args)> {};

// Add all combinations of variadic/non-variadic, cv-qualifiers and ref-qualifiers

Demo .

关于c++ - 从模板参数中获取函数参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27866909/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com