如何理解C++ enable_if中的推动因素
how to understand the enabler in C++ enable_if
以下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"
它说:当且仅当非常量非易失性R
模板参数的类型为 std::any
时启用call
函数,以便该参数是指向enabler
的参考指针。否则,编译器错误。
是对指针的引用。例如,在C++中,我们可以执行以下操作:
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.
}
现在对于上述代码的示例用法..
#include <iostream>
#include <any>
void* enabler = nullptr;
template <
typename R, typename F,
typename std::enable_if<std::is_same<typename std::remove_cv<R>::type, std::any>::value>::type*& = enabler,
typename... Args>
std::any call(F fn, Args&&... args) {
return fn(std::forward<Args>(args)...);
}
std::any func(int i)
{
std::cout<<i<<"n";
return std::any(1);
}
void func2(int i)
{
std::cout<<i<<"n";
}
int func3(int i)
{
std::cout<<i<<"n";
return 200;
}
int main()
{
//Return type is an std::any..
auto rn = call<std::any>(func, 10);
std::cout<<std::any_cast<int>(rn)<<"n";
//Return type is void and cannot be converted to std::any..
//call<void>(func, 10); //Error here because void type is not `std::any` type..
//Return type of `func3` is an integer.. `call` implicitly constructs an std::any from that..
auto res = call<std::any>(func3, 20);
std::cout<<std::any_cast<int>(res)<<"n";
return 0;
}
相关文章:
- 理解boost::asio-async_read在无需读取内容时的行为
- 如何理解C++标准N3337中的expr.const.cast子句8
- C++,我收到一个无法理解的编译器错误
- 我的简单if-else语句是如何无法访问的代码
- 如何将enable-if与模板参数和参数包一起使用
- 无论条件是否为true,if总是在c++中执行
- Arduino:for/while/if在void setup()或void loop()之前?——错误:之前需要不合格
- 函数何时会在c++中包含stack_Unwind_Resume调用
- 理解c++中的引用
- 如何理解将半精度指针转换为无符号长指针和相关的内存对齐
- Insert函数不适用于2 if语句C++
- If语句未被求值C++
- C++嵌套if语句,基本货币交换
- 多个If语句与使用逻辑运算符计算条件的单个语句的比较
- Python中的for循环与C++有何不同
- 是否可以使用if constexpr删除控制流语句
- 无法理解 if 命令
- 对'if constexpr'的错误理解
- C++ 入门 1.4.4.不太理解第一个IF语句的必要性
- 理解C/C++中/if组合的无括号