如何让成员函数实现依赖于类的模板参数?

How to have a member function implementation dependent on class' template parameter?

本文关键字:参数 依赖于 成员 函数 实现      更新时间:2023-10-16

这是我最好的尝试:

#include <iostream>
template <bool EnableSomething = false>
class MyClass
{
    typename std::enable_if< EnableSomething >::type
        something(int& x)
    {
        x += 1; //do something
    }
    typename std::enable_if< !EnableSomething >::type
        something(int& x)
    {
        // do nothing, should be optimized away
    }
public:
    void Process()
    {
        int x = 0;
        something(x);
        std::cout << "Enabled: " << EnableSomething << ".  x = " << x << std::endl;
    }
};
int main()
{
    MyClass<true> yes;
    MyClass<false> no;
    yes.Process();
    no.Process();
    return 0;
}

编译器说: tester.cpp(12): error C2039: 'type': is not a member of 'std::enable_if<false,_Ty>'

制作常规模板,默认参数从parent tempalte中获取:

template<bool x_enabled = EnableSomething> 
typename std::enable_if< x_enabled >::type
something(int& x)
{
    x += 1; //do something
}
template<bool x_enabled = EnableSomething> 
typename std::enable_if< !x_enabled >::type
something(int&)
{
    // do nothing, should be optimized away
}

使用C 17事物变得更简单:

void
something(int& x)
{
    if constexpr(EnableSomething)
    {
        x += 1; //do something
    }
}