C++ 中具有两个参数的Methode专门化

C++ 中具有两个参数的Methode专门化,c++,partial-specialization,C++,Partial Specialization,我试图根据类模板的第一个参数的类型专门化一个方法 template<class T, class TOut = double > class Histogram { // ... void resetMinMaxVal(); } template<class TOut> inline void Histogram<int, TOut>::resetMinMaxVal() { // ... } template<class

我试图根据类模板的第一个参数的类型专门化一个方法

template<class T, class TOut = double >
class Histogram  
{
    // ...
    void resetMinMaxVal();
}

template<class TOut>
inline void Histogram<int, TOut>::resetMinMaxVal()
{
    // ...
}

template<class TOut>
inline void Histogram<long, TOut>::resetMinMaxVal()
{
    // ...
}

我无法确定语法,似乎这应该是可能的?

在本例中,您专门化了整个类,因此需要声明整个类的专门化

像这样:

#include <iostream>

template<class T, class TOut = double>
class Histogram
{
public:
    void resetMinMaxVal() {
        std::cout << "Generic method\n";
    }
};

template<class TOut>
class Histogram<int, TOut>
{
public:
    void resetMinMaxVal() {
        std::cout << "int method\n";
    }
};

template<class TOut>
class Histogram<long, TOut>
{
public:
    void resetMinMaxVal() {
        std::cout << "long method\n";
    }
};

int main(int argc, char* argv[])
{
    Histogram<int> hint;
    hint.resetMinMaxVal(); //prints 'int method'

    Histogram<long> hlong;
    hlong.resetMinMaxVal(); //prints 'long method'

    Histogram<double> hdouble;
    hdouble.resetMinMaxVal(); //prints 'Generic method'

    return 0;
}

语法对我来说很好,你得到的确切错误是什么?答案是在另一篇文章中给出的我在发帖前寻找答案,但没有找到那个答案。似乎语言C++不支持部分方法特化。“看起来C++语言不支持部分方法特化”。首先我没有意识到,您正在寻找部分专门化。谢谢,不幸的是直方图非常大,resetMinMaxVal是我想要专门化的唯一方法。