3

私の経験では、メタテンプレートは本当に楽しく(コンパイラが準拠している場合)、パフォーマンスを向上させることができます。幸運なことに、メタテンプレートを作成する経験豊富なC ++プログラマーに囲まれていますが、新しい開発者が到着してできることもあります。彼が適切に開始されるまでの数週間、私たちが使用するいくつかのメタテンプレートトリック(主にAndrei Alenxandrescuのもの)の頭または尾を作ります。

それで、他のC++プログラマーの状況はどうなっているのだろうかと思っていました。メタテンプレートプログラミングは、C ++プログラマーが知っておく必要があるもの(もちろんエントリーレベルの学生を除く)である必要がありますか?

編集:私の質問は本番コードに関連しており、サンプルやプロトタイプはほとんどありません。

4

8 に答える 8

7

テンプレートのメタプログラミングを本当に知っている候補者を十分に見つけることができれば、ぜひそれを要求してください。あなたは多くの資格のある潜在的に生産的な人々にドアを見せます(これを行う方法を知らない正当な理由がたくさんあります、つまり、多くのプラットフォームでそれを行うと、コンパイルできないコードを作成するでしょう、またはその平均的な開発者は理解するのに苦労するでしょう)。テンプレートメタプログラミングは素晴らしいですが、それに直面しましょう。それはC++を限界まで押し上げています。これで、候補者はおそらく基本を理解する必要があります(コンパイル時にn!を計算するか、少なくともコードが表示された場合にどのように機能するかを説明します)。あなたの新しい開発者が数週間以内に確実に生産的になっているなら、あなたの現在の採用はおそらくかなり良いです。

于 2008-10-14T05:00:04.163 に答える
4

はい、でも個人的には優先しません。これは気の利いた機能ですが、少し状況が異なり、それがなくても優れたC++コードを開発できます。個人的には1、2回使ったことがありますが、普段使うのに十分な価値があるとは思っていませ。(多分それは私のC ++プロダクション経験の欠如の機能ですが)

于 2008-10-14T05:00:33.057 に答える
3

実稼働コードでテンプレート メタプログラミングをこれまでに使用した唯一の用途は、ハードウェア レジスタを N 回読み取り、続いて別の M 回、ハードウェアごとに N、M 異なり、コンパイル時に既知である重要なループを展開することです。一般に、これらの手法は私たちのコードベースには自然に適合しないように思われ、コード レビューを通過することは決してありません。

于 2008-10-14T06:16:18.893 に答える
2

必須?いつものように、それは依存します。小さな小さな DSP 用のある程度まともな C++ コンパイラを手に入れたばかりの組み込み業界の私たちにとっては、クラスを使用できることをうれしく思います。

ただし、中程度の C++ コンパイラ (gcc 3.3ish+ など) を使用している場合は、テンプレート メタプログラミングを検討する必要があります。もちろん、良いスタートはブースト ライブラリです。STL のガスがなくなったときに探し回るようなテンプレートのほとんどをカバーしているためです。また、絶好のジャンプポイントとしても機能します。

ただし、テンプレート メタプログラミングの利点 (数行の < と > を使用した、タイプ セーフなコードが多数あること) が、それにかかるコストに見合わない場合があります。時々、古き良き for( container::const_iterator iter = ... ) が必要なことをうまくやってくれます。

于 2008-10-14T06:25:26.707 に答える
2

18 か月後、このトピックは今でも非常に関連性があります。テンプレートのメタ プログラミングに必要な知識はありませんが、少なくとも条件文や奇妙な繰り返しのテンプレート パターン (ループ) などの基本を読んで説明できる必要があります。それを超えて、良いインターフェースを書くことができる人が数人いる限り、YMMV.

于 2010-04-13T18:18:21.670 に答える
1

テンプレートとメタプログラミングを (広範ではありませんが) 合理的に使用する人として、私はインターフェイス (つまり、内部使用インターフェイス) を可能な限り正常にしようと努力しています。誰もがテンプレートを理解できるわけではなく、複雑なメタ プログラミング パラダイムや難解なメタ プログラミング パラダイムを理解できない場合もあります。

そうは言っても、私の低​​レベル ライブラリの変更を掘り下げたい場合は、かなりの知識が必要になります。ただし、それらを使用するためにテンプレートを知っている必要さえありません (ベースラインの知識は別として)。それが私が少なくとも線を引く方法であり、他の開発者に期待する知識レベルです (コードの使用方法によって異なります)。

于 2008-10-14T07:48:04.637 に答える
1

テンプレート プログラミングが必要だとは思いませんが、知っておくとよいでしょう。STL や Boost などのテンプレート ライブラリを効果的に使用するには、対象について十分に理解しておく必要があります。

誰かにインタビューするとき、私はいつもテンプレートのメタプログラミングについていくつか質問します。候補者がその主題について知らない場合、私はそれを彼らに反対することは決してありません. しかし、もしそうなら、それは彼らに有利な大きなプラスです.

于 2008-10-14T10:25:13.790 に答える
-1

C++ テンプレートの使用方法を知る必要はありません。それらがなくても、ほとんどのことを行うことができます。しかし、それらは素晴らしい機能です。

独自のテンプレートを展開するため、学習の大きな部分となるコードの残りの部分と同じように、新しい人はテンプレートに慣れる必要があります。

STLのいくつかの機能の使い方を学ぶことをお勧めします。私はこのライブラリを本番コードで使用しましたが、時間を節約し、物事をかなり簡素化します。また、必要に応じて自分で巻きます。

また、 boostライブラリについても良いことを聞きました。

移植可能なコードを書く必要がある場合、多くのコンパイラがまだテンプレートを適切にサポートしていないため、通常はテンプレートを使用しません。ポータブル STL が必要な場合は、 STLPortが最もポータブルです。

于 2008-10-14T05:31:19.827 に答える