3
다음 코드를 참조하십시오. 첫 번째 MyClass <>에는 두 가지 기능 (func1 및 func2)이 있습니다. 그렇다면 func1에서는 MyClass에 대해 특별한 일을하고 싶지만 func2에서는 그렇지 않습니다. func2에 대한 코드를 다시 입력해야하는 것처럼 보입니다. 이 문제를 해결할 방법이 있는지 궁금합니다. 감사합니다템플릿 전문화 : 특수 사례를 부분적으로 구현할 수 있습니까?
#include <iostream>
using namespace std;
template <class T>
class MyClass {
public:
void func1(){
cout<<"default: func1"<<endl;
}
void func2(){
cout<<"default: func2"<<endl;
}
private:
T haha;
};
template <>
class MyClass<double> {
public:
void func1(){
cout<<"special: func1"<<endl;
}
};
int main()
{
MyClass<int> intclass;
intclass.func1();
intclass.func2();
MyClass<double> doubleclass;
doubleclass.func1();
doubleclass.func2(); // error 'class MyClass<double>' has no member named 'func2'
return 0;
}
감사합니다. 이 예제에서 작동합니다. 그러나 제 작업 예제에서는 템플릿 부분이 먼저 정적 라이브러리를 작성하는 데 사용되며 컴파일러는 복제 된 정의에 대해 불만을 제기합니다. 더 이상의 코멘트? –
@ YanZhu는 전문화를 '인라인'으로 만듭니다. – mfontanini
감사합니다. 그것은 연결을 전달합니다. 이것의 뒤에 어떤 이론? 이것에 대한 몇 가지 기사를 가르쳐 주시겠습니까? 나는 구글을 시도했지만 유용한 것들을 찾을 수 없다. –