는 다음의 C++ 코드 고려해특수 철골 구조 템플릿 반원 특성화
template <int K>
struct KData
{
float data[K];
};
template<int K>
class KClass
{
public:
typedef KData<K> Data;
Data m_data;
Data square()
{
Data result;
for(int i = 0; i < K; ++i)
result.data[i] = m_data.data[i] * m_data.data[i];
return result;
}
// Specialization for K = 2
template<>
KClass<2>::Data square();
};
template<>
KClass<2>::Data KClass<2>::square()
{
Data result;
result.data[0] = m_data.data[0] * m_data.data[0];
result.data[1] = m_data.data[1] * m_data.data[1];
return result;
}
int main()
{
KClass<2> c;
c.m_data.data[0] = c.m_data.data[1] = 1.f;
c.square();
return 0;
}
그것을 갖는 템플릿 데이터 부재 ('M_DATA') 및 데이터 부재에 어떤 연산을 수행하는 방법을 가지고 상기 'KCalss' ('광장()'). 제가하고 싶은 것은 예를 들어 K = 2 인 경우에 'square()'의 특수화를하는 것입니다.
main.cpp:23:14: error: explicit specialization in non-namespace scope 'class KClass'
main.cpp:24:5: error: 'Data' in 'class KClass<2>' does not name a type
내가 잘못 무엇인지 어떤 생각 : 4.6.7이나 4.7.2로 컴파일하려고
는다음과 같은 오류를 준다? 사전에
감사합니다.
=== 편집 === 내가 찾은 해결 방법뿐만 아니라 템플릿으로 방법 ') (광장'두 번째를 선언하는 것입니다
: 그것은 잘 작동
template<int K2>
typename KClass<K2>::Data square();
만 허용 사용자가 전화를 'aquare() 클래스에서 다른 템플릿 매개 변수, 예를 들면 통과 :
KClass<2> c;
c.square<3>;
은 "정의 참조하는"오류 연결 준다.
=== EDIT (SOLUTION) ===
좋아,이 솔루션은 생각보다 간단했다. 템플릿 선언을 제거하기 만하면됩니다.
이 필요하지 않습니다.
VC++ 2010에서 컴파일됩니다. – Yola