【发布时间】:2022-01-06 17:01:31
【问题描述】:
在 c++ 中,我想获取函数参数的类型。 问题是我不想只获取第一个参数之后的所有参数的类型
template <typename T>
struct FuncTraits : FuncTraits<decltype(&T::operator())> {};
template <typename C, typename R, typename... Args>
struct FuncTraits<R(C::*)(Args...) const> : FuncTraits<void(*)(Args...)> {};
template <typename... Args> struct FuncTraits<void(*)(Args...)> {
using ArgCount = std::integral_constant<std::size_t, sizeof...(Args)>;
using ArgsType = std::tuple<typename std::decay<Args>::type...>;
};
在此示例中,它获取所有参数的类型,但我想要更多类似的东西
template <typename T>
struct FuncTraits : FuncTraits<decltype(&T::operator())> {};
template <typename C, typename R, typename... Args>
struct FuncTraits<R(C::*)(int, Args...) const> : FuncTraits<void(*)(int unused, Args...)> {};
template <typename... Args> struct FuncTraits<void(*)(int unused, Args...)> {
using ArgCount = std::integral_constant<std::size_t, sizeof...(Args)>;
using ArgsType = std::tuple<typename std::decay<Args>::type...>;
};
然而,这无法完成编译。 我如何实现这样的目标?
【问题讨论】:
-
您应该只需要添加另一个模板参数,例如
typename T,然后您将拥有FuncTraits<void(*)(T unused, Args...) -
请包含完整的错误信息和所有警告。
标签: c++ visual-c++ c++20