2009-06-01 7 views
1

(C++) :함수에서 typename을 매개 변수로 사용하는 방법은 무엇입니까? 내가 매개 변수로 유형 이름을 통과 할 수 있어야합니다

int X = FileRead(file, 9, char); 

개념은 FILEREAD입니다 (표준 : : fstream, INT 볼때는 ???) (POS의 *의를 sizeof를 읽어 어떤 유형은) 원하는 위치를 얻는 것입니다. ,

template<typename T> 
T FileRead(std::fstream file, int pos, T type) 
{ 
    T data; 
    file.read(reinterpret_cast<char*>(&data), sizeof(data)); 
    return data; 
} 

하지만 내가 FILEREAD을 사용하고자 할 때마다 사용하는 유형의 변수를 만드는 것이 필요하고, 내가 정말 그냥 때문에 하나 개의 함수의 전체 프로그램을 재 설계 기분이 안 : 나는 템플릿을 시도 어쨌든 typename을 매개 변수로 사용합니까?

답변

12

유형 이름을 매개 변수로 사용하려면 템플릿을 사용하십시오.

template<typename T> 
T FileRead(std::fstream &file, int pos) 
{ 
    T data; 
    file.read(reinterpret_cast<char*>(&data), sizeof(T)); 
    return data; 
} 

이 형식은 기본적으로 구성 가능한 것으로 가정합니다. 그렇지 않으면 어쨌든 파일에서 스트리밍하는 데 어려움을 겪을 것입니다.

이처럼 전화 :

char value=FileRead<char>(file, pos); 

당신이 호출 유형을 지정하고 싶지 않는 경우에, 당신은 당신의 API를 수정할 수 :

template<typename T> 
void FileRead(std::fstream &file, int pos, T &data) 
{ 
    file.read(reinterpret_cast<char*>(&data), sizeof(T)); 
} 

는 다음과 같이 호출 - 타입 추론된다

char value; 
FileRead(file, pos, value); 
+0

그러면 "T '에 대한 인수를 추론 할 수 없다는 오류가 발생합니다. –

+0

반환 값이 아닌 인수로 T가 필요하다고 생각합니다. –

+2

FileRead (파일, 위치)와 같이 호출하십시오. – sth

-2

프로그램을 컴파일 한 후에는 유형과 같은 것이 없습니다. 이것은 C++의 스타일입니다.

+1

는 RTTI가 존재하지 않을 것입니다. – CoffeeandCode

3

매우 간단하다

template<typename T> 
T FileRead(std::fstream file, int pos) 
{ 
    T data; 
    file.read(reinterpret_cast<char*>(&data), sizeof(data)); 
    return data; 
} 

과를 통해 전화 : 그게 사실이라면

char x = FileRead<char>(file, pos);