使用不同的enable_if条件选择成员函数
enable_if元函数用于指定模板函数参数并根据它们选择合适的成员函数。考虑以下代码:
template
struct Point
{
// Check if T is int and call MyFunction for int
void MyFunction(typename std::enable_if<:is_same int>::value, T &>::type* = 0)
{
std::cout ::value, float &>::type* = 0)
{
std::cout 但是,此代码可能会导致编译器错误,指示“'struct std::enable_if'中没有名为'type'的类型”。
理解enable_if
enable_if 确保在重载决策期间仅考虑可行的函数重载。如果模板参数替换失败,则将从候选集中删除该重载。
在上面的示例中,在实例化成员函数时模板参数 T 是已知的。为了实现所需的行为,我们可以创建一个默认为 T 的虚拟模板参数并使用它执行 SFINAE:
template
struct Point
{
template
typename std::enable_if<:is_same int>::value>::type
MyFunction()
{
std::cout
typename std::enable_if<:is_same float>::value>::type
MyFunction()
{
std::cout
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3