我知道我可以在C ++中指向具有可变参数列表的函数:
bool (*fun)(bool,...);
但是我正在寻找构造可以使指向以下任何功能:
bool f(bool);
bool f(bool, bool);
bool f(bool, bool, bool);
bool f(bool, bool, bool, bool);
bool f(bool, bool, bool, bool /*etc. */);
现在我尝试通过指向函数的指针来解决这个问题,该函数获取bool数组和数组大小
bool (*f)(bool*, in);
但我无法确定传递的数组是否至少与size参数一样。
答案 0 :(得分:1)
有很多方法可以解决这个问题:
传递对数组的引用并将其模板化为大小。这样,您可以避免数组到指针衰减并丢失任何类型信息:
template <size_t N> bool func(bool(*f)(bool(&arr)[N]));
使用std::array
获取具有值语义的数组:
template <size_t N> bool func(bool(*f)(std::array<bool, N>));
使用可变参数模板来允许旧签名。这可能有点过头了。
template <typename ... Args, typename = std::enable_if_t<AllSame<bool, Args...>::value>>
bool func(bool(*f)(Args...));
template <typename T, typename ... Args>
struct AllSame;
template <typename T>
struct AllSame<T> : public std::true_type{};
template <typename T, typename Arg, typename ... Args>
struct AllSame : public std::conditional_t<std::is_same<T, Arg>::value,
AllSame<T, Args...>,
std::false_type> {};