2017-03-01 3 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; 
}; 

あなたが見るように、従業員/人の名前を印刷する関数に渡されるタイプによって異なります。 私の質問は: どのようにデータの種類に応じて動作するようにコンピュータを指示することができます。 typeがヒトである場合

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

:typeが従業員である場合、私は意味

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

代わりに直接印刷 'employee'と' human'(そのウェル、 'const'参照)上にオーバーロードされた関数から印刷名前を持ちます。通常のルールが適用されます:余分な間接的なレベルで問題が解決されます。 C++ 17では 'if constexpr'を使うことができましたが、実際には利用できません。 –

+0

*最大sort_param.useテンプレートプログラミングで人間/従業員の名前を表示するプログラムを書く*関数/プログラムへの入力とは何ですか? –

+0

タイプを知る必要がある場合、テンプレートは間違ったアプローチです。代わりに関数をオーバーロードする必要があります。 DietmarKü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 [tag:C++]という理由がありますか? – IInspectable

+0

@IInspectableはい、ありがとう、私は編集しました。 – Alper

+0

関数のオーバーロードを使用しませんでした。しかし、私はこれが最も効率的で有用なものだと思います。とにかくありがとうございました! –

関連する問題