问题
给定任何函数(或可调用)类型Function
,如何将其所有参数类型作为元组类型?
例如,我需要一个trait function_traits<Function>::arguments
,其中:
int f();
typename function_traits<decltype(f)>::arguments // => gives me std::tuple<>
void g(int);
typename function_traits<decltype(g)>::arguments // => gives me std::tuple<int>
void h(int, int);
typename function_traits<decltype(h)>::arguments // => gives me std::tuple<int, int>
字符串
我的想法
第一个
我需要得到参数的大小,幸运的是boost已经实现了function_traits<F>::arity
然后
从1到artify生成一个std::integer_sequence
,将其Map到arguments类型,但问题来了,要Mapinteger_sequence
,我需要这样的东西:
function_traits<F>::arg_type<N> // -> N-th arg_type
型
但boost仅提供以下功能:
function_traits<F>::argN_type
型
提问
如何实现function_traits<F>::arg_type<N>
?我可以使用c标准到c17
3条答案
按热度按时间c3frrgcw1#
大概是这样的:
字符串
使用示例:
型
online compiler
kb5ga3dv2#
玩得太晚了吗?
你可以用C++17来...如何使用
std::function
演绎指南?字符串
下面是一个完整的编译示例
型
vyswwuz23#
现在是几年后,但我有一个非常有效的(免费)解决方案,如果你仍然需要它(如果你没有锁定到Boost)。我对我发现的处理函数traits的解决方案不满意,包括Boost的(既不是“function_traits”也不是“callable_traits”),我写了自己的解决方案,并在GitHub上为C++开发人员社区提供。我相信它是目前你能找到的同类库中最完整的(专业编写和完整文档)。
参见https://stackoverflow.com/a/76253527/698767(以及此处引用的链接)。
请注意,这里的例子也解决了你的问题。