如何使用SFINAE停用我的'Pow(T)`的非整体版本?

问题描述 投票:0回答:1

我被要求使用SFiNAE拒绝我的Pow(T)模板功能的非集成版本。因此,如果推导的类型是整数,则返回argument * argument,否则不执行任何操作,仅通知该版本已被SFINAE拒绝。

这是我的尝试:

template<typename T>
auto Pow(T x)->std::enable_if_t<std::is_integral<T>::value>
{
    return x * x;
}

void Pow(...)
{
    std::cout << "rejected by SFiNAE" << std::endl;
}


int main() 
{
    auto ret = Pow(5); // error here:  'ret': variable cannot have the type 'void'
    cout << typeid(Pow(5)).name() << endl; // void
}
  • 请帮助。我不知道如何实现。
c++ sfinae
1个回答
3
投票

您需要向std::enable_if提供第二个参数:

template<typename T>
auto Pow(T x)->std::enable_if_t<std::is_integral<T>::value, decltype(x * x)>
{
    return x * x;
}
© www.soinside.com 2019 - 2024. All rights reserved.