C++ 是否可以为模板类的成员函数编写专门化? 模板 甲级 { //... void f() { std::cout

C++ 是否可以为模板类的成员函数编写专门化? 模板 甲级 { //... void f() { std::cout,c++,templates,C++,Templates,您不能只专门化一个类的一个方法。通常您可以使用同一t上的模板嵌套类来解决这个问题 template <class T, bool flag> class A { //... void f() { std::cout << "false" << std::endl; } //... }; template<class T> void A<T, true>::f<T, true

您不能只专门化一个类的一个方法。通常您可以使用同一
t
上的模板嵌套类来解决这个问题

template <class T, bool flag>
class A
{
    //...
    void f()
    {
        std::cout << "false" << std::endl;
    }
    //...
};

template<class T>
void A<T, true>::f<T, true>()
{
    std::cout << "true" << std::endl;
}
模板
甲级
{
//...
模板
类F_助手
{
void运算符()()
{

std::cout您可以专门化整个模板类-

#包括
模板
甲级
{
//...
void f()
{

std::cout您需要专门化整个类:

#include <iostream>

template <class T, bool flag>
class A
{
    //...
    void f()
    {
        std::cout << "false" << std::endl;
    }
    //...
};

template<class T>
class A<T, true>
{
    //...
    void f()
    {
        std::cout << "true" << std::endl;
    }
    //...
};
#包括
模板
甲级
{
公众:
void f()
{

与其他答案所说的相反,您可以专门化类模板的成员函数,但需要提供所有模板参数

#include <iostream>

template <class T, bool flag>
class A
{
public:
    void f()
    {
        std::cout << "false" << std::endl;
    }
};

template<class T>
class A<T,true>
{
public:
    void f()
    {
        std::cout << "true" << std::endl;
    }
};

void main()
{
    A<int, false> a;
    a.f();

    A<int, true> b;
    b.f();
}

您的编译器允许部分模板专门化吗?谢谢@Mark B:但是为什么
模板类F_Helper
而不是
模板类F_Helper
?谢谢,我遇到了完全相同的问题,下面是一个附加示例
#include <iostream>

template <class T, bool flag>
class A
{
public:
    void f()
    {
        std::cout << "false" << std::endl;
    }
};

template<class T>
class A<T,true>
{
public:
    void f()
    {
        std::cout << "true" << std::endl;
    }
};

void main()
{
    A<int, false> a;
    a.f();

    A<int, true> b;
    b.f();
}
template<>
void A<int, true>::f()
{
    std::cout << "true" << std::endl;
}
template<typename T>
void A<T, true>::f()
{
    std::cout << "true" << std::endl;
}
template <class T, bool flag>
class A
{
    template<typename, bool> struct params { };

    void f()
    {
        f(params<T, flags>());
    }

    template<typename U>
    void f(params<U, true>) {
        std::cout << "true" << std::endl;
    }

    template<typename U, bool flag1>
    void f(params<U, flag1>) {
        std::cout << "dunno" << std::endl;
    }
};