2012-05-26 2 views
0

두 개의 템플릿 함수를 작성하려고합니다. 그들은 단순히 지역 변수에 대한 참조를 반환해야합니다.두 가지 표준 유형에 대한 두 개의 템플릿 함수

class Cube_cache_value { 
public: 
    //... 
    template<> 
    QVector<unsigned short>& get_buffer<unsigned short>() { return vector; } // error here 

    template<> 
    QVector<float>& get_buffer<float>() { return float_vector; } 

private: 
    QVector<unsigned short> vector; 
    QVector<float> float_vector; 
}; 
다음

error: explicit specialization in non-namespace scope 'class hsp::Cube_cache_value'

내가 클래스 범위에서 기능을 얻으려고 노력했지만, 컴파일러는 여전히 그것을 좋아하지 않아 : :하지만이 작동하지 않습니다

class Cube_cache_value { 
public: 
    //... 
    inline QVector<unsigned short>& get_buffer() { return vector; } 
    inline QVector<float>& get_float_buffer() { return float_vector; } 

private: 
    QVector<unsigned short> vector; 
    QVector<float> float_vector; 
}; 

template<> 
QVector<unsigned short>& get_buffer<unsigned short>(Cube_cache_value* v) { //error here 
    return v->get_buffer(); 
} 

template<> 
QVector<float>& get_buffer<float>(Cube_cache_value* v) { return v->get_float_buffer(); } 

error: expected initializer before '<' token

하세요 내 코드를 수정하십시오.

+0

기능을 특수화하지 않고 무시할 수 있습니다. http://www.gotw.ca/publications/mill17.htm – nijansen

+0

을 참조하십시오. const가 아닌 포인터로 반환하는 경우 공개로 설정하여 어리석은 접근자를 버릴 수도 있습니다. –

+0

@Cat Plus 더하기, 다른 템플릿 함수에서 사용하기 때문에 템플릿 함수가 필요합니다. –

답변

1

처음에는 나쁜 디자인처럼 보입니다. 귀하의 클래스가 2 가지 유형에 대해 2 개의 다른 벡터를 저장하는 이유는 무엇입니까? 그것은 부 풀리는 것이고 당신이 원할지도 모르는 다른 유형을 위해 이것을 할 필요가 있습니다.

왜 안되나요?

template <typename T> 
class Cube_cache_value { 
public: 
    // ... 
    QVector<T>& get_buffer() { return buf; } 

private: 
    QVector<T> buf; 
}; 
+0

동의합니다. 두 함수를 추가하고 나중에이 클래스를 다시 고려할 수 있다고 생각했습니다. 그러나 지금은 그것을 바꿔 놓는 것이 훨씬 낫다는 것을 알았습니다. –

관련 문제