如何理解C ++ enable_if中的启动器

时间:2017-11-03 03:13:04

标签: c++ templates traits

以下enable_if用法

的含义是什么?
template <
    typename R, typename F,
    typename std::enable_if<std::is_same<typename std::remove_cv<R>::type, any>::value>::type*& = enabler,
    typename... Args>
any call(F fn, Args&&... args) {
    return fn(std::forward<Args>(args)...);
}

尤其是"type*& = enabler"

1 个答案:

答案 0 :(得分:0)

它说:当且仅当非const非易失性call模板参数的类型为R时,启用std::any函数,使得参数是{{1}的引用指针}}。否则,编译错误。

引用指针是对指针的引用。例如,在C ++中,我们可以执行以下操作:

enabler

但我们也可以这样做:

void func(int** ptr)
{
   *ptr = new int[100]; //ptr is a pointer to pointer.
}

现在可以使用上面代码的示例..

void func(int* &ptr)
{
    ptr = new int[100]; //ptr is a reference to a pointer.
}