2017-03-01 2 views
0

숙제하는 데 문제가 있습니다. ((최대 sort_param.use 템플릿 프로그래밍 인간/직원의 이름을 인쇄하는 프로그램을 작성).) 인간과 직원은 다음과 같이 정의된다 :템플릿 정의 함수에 전달되는 유형을 파악하는 방법은 무엇입니까?

질문은 이것이다 : 내가 직면 한 문제는 이것이다
struct human 
{ 
char name[30]; 
char * family; 
int id; 
int sort_param; 
}; 

struct employee 
{ 
human h; 
char post[50]; 
int sort_param; 
}; 

직원과 사람의 이름을 인쇄하는 것은 함수에 전달되는 유형에 따라 다릅니다. 내 질문 : 컴퓨터가 데이터 형식에 따라 작동하도록 지시 할 수있는 방법. 유형이 다음 인간의 경우

cout << employee.h.name << endl; 

: 유형이 다음 직원 인 경우 내 말은 그 유형이 될 수

cout << human.name << endl; 
+3

'employee'와'human' (well,'const' 참조)에 오버로드 된 함수에서 이름을 직접 출력하지 말고 인쇄하십시오. 일반적인 규칙이 적용됩니다. 간접적 인 추가 수준으로 인해 문제가 해결됩니다. C++ 17에서는'if constexpr'을 사용할 수는 있지만 실제로 사용할 수는 없습니다. –

+0

* 최대 sort_param.use 템플릿 프로그래밍을 사용하여 사람/직원의 이름을 인쇄하는 프로그램 작성 * 함수/프로그램에 대한 입력은 무엇입니까? –

+0

유형을 알아야 할 경우 템플리트가 잘못된 접근 방법입니다. 대신 함수를 오버로드해야합니다. 더 작은 규모에서도 Dietmar Kühl이 제안한 바와 같이 – StoryTeller

답변

1

그냥 인수 중 하나와 함수를 호출 오버로드 기능을 사용 인간 또는 직원

void print_name(const employee& emp) 
{ 
    cout << emp.h.name << endl; 
} 
void print_name(const human& hum) 
{ 
    cout << hum.name << endl; 
} 

인수가 편집됩니다.

+0

은 분명히 void print_name (const employee & emp) {...}'등이어야합니다. 질문에 대한 태그는 [tag : C++]입니다. – IInspectable

+0

@IInspectable 예, 감사합니다. 편집했습니다. – Alper

+0

나는 함수 오버로딩을 사용하지 않았다. 하지만 이것이 가장 효율적이고 유용한 것이라고 생각합니다. 아무튼 감사 해요! –