2016-10-19 3 views
1

는 코드가있다 :방지 템플릿 부분 특수화 오류

#include <functional> 

template<typename DataType, typename Compare=std::less<DataType>> 
class MyClass { 
public: 
    explicit MyClass(const Compare& f = Compare()) { 
    compare = f; 
    }; 

    bool foo(DataType, DataType); 
private: 
    Compare compare; 
}; 

template<typename DataType> 
bool MyClass<DataType>::foo(DataType a, DataType b) { 
    return compare(a, b); 
} 

하는 컴파일 오류지고있는 동안 :

error: nested name specifier 'MyClass<DataType>::' 
     for declaration does not refer into a class, class template or class 
     template partial specialization bool MyClass<DataType>::foo(DataType a, DataType b) { 

어떻게 오류를 방지하고 클래스 외부 메소드를 선언을?

답변

4

당신은 기본 템플릿 정의에서와 같이 템플릿 매개 변수를 제공해야합니다 :

//  vvvvvvvvvvvvvvvvvvvvvvvvvvvvv 
template <typename DataType, typename X> 
bool MyClass<DataType, X>::foo(DataType a, DataType b) { 
//   ^^^^^^^^^^^ 
    return compare(a, b); 
} 
+0

[데모] (http://ideone.com/1ZFJnT) –