关于bool值的c ++类成员函数专门化

时间:2013-05-13 19:16:22

标签: c++ c++11

我有一个带有bool模板参数的类。该类将有几个方法,我需要专门研究类bool模板参数。有没有办法在没有专门整个班级本身的情况下做到这一点?

下面的Foo :: bar()是我的意思的一个例子,它不起作用,因为std :: is_same适用于类型而不是值

感谢。

template<bool Mode>
class Foo
{   
public:
template<bool M=Mode, typename std::enable_if<std::is_same<M,true>::value>::type * = 0>
void bar()
{
    std::cout << "true" << std::endl;
}

template<bool M=Mode, typename std::enable_if<std::is_same<M,false>::value>::type * = 0>
void bar()
{
    std::cout << "false" << std::endl;
}

3 个答案:

答案 0 :(得分:9)

也许我错过了什么,但为什么不使用简单的旧专业?

template <bool M>
struct base_template {
   void bar();
};

template <>
inline void base_template<true>::bar() { std::cout << "true\n"; }
template <>
inline void base_template<false>::bar() { std::cout << "false\n"; }

答案 1 :(得分:4)

您不需要使用std::is_samestd::enable_if已经采用布尔参数:

template <bool Mode>
class Foo
{   
    public:
        template <bool M = Mode, typename std::enable_if<M>::type* = nullptr>
        void bar()
        {
            std::cout << "true" << std::endl;
        }

        template <bool M = Mode, typename std::enable_if<!M>::type* = nullptr>
        void bar()
        {
            std::cout << "false" << std::endl;
        }
};

这是demo

答案 2 :(得分:2)

你走在正确的轨道上。只需直接使用模板参数:

template<bool M=Mode, typename std::enable_if<M == true>::type * = 0>
void bar()                                 //^^^^^^^^^^
{
    std::cout << "true" << std::endl;
}