可以定义一个指向函数的指针,该函数具有" not"变量参数列表例如" bools"?

时间:2015-02-07 22:38:22

标签: c++ arrays pointers

我知道我可以在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参数一样。

1 个答案:

答案 0 :(得分:1)

有很多方法可以解决这个问题:

  1. 传递对数组的引用并将其模板化为大小。这样,您可以避免数组到指针衰减并丢失任何类型信息:

    template <size_t N> bool func(bool(*f)(bool(&arr)[N]));
    
  2. 使用std::array获取具有值语义的数组:

    template <size_t N> bool func(bool(*f)(std::array<bool, N>));
    
  3. 使用可变参数模板来允许旧签名。这可能有点过头了。

     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> {};