から列挙型を取得しますか?私。列挙子 "Foo_A"などから列挙型 "Foo"を推論することはできません。それを何らかの理由でテンプレートコードで使用できますか?列挙型クラスはここで助けますか?私はこのようなコードを持っていると仮定すると、列挙子
答えて
いいえあなたの質問に対する答えは、現在これを行う方法ではありません。あなたが直面していることはtemplate <typename T, T t>
イディオムとして知られています。実際にはGoogleの場合は、ほぼ75,000ヒットを見つけるだろうし、回避策はありません。あなたはあなたが持っているように専門化しなければなりません。
しかし、地平線に良いニュースがあります。これは過去10年間に標準化委員会に何度も提案されている:
- N3405は
T
がタイプで、t
が唯一の値はテンプレート引数として渡された値、あるtemplate <typename T t>
の手当を提案 - N3601は
template <typename T, T t>
は、コンパイラがテンプレート引数として単一の値のみを受け入れるだろうし、それからT
とt
- N4469キーワード
auto
をすることを提案推測う特殊なケースであることを提案しましたメタパラメータを指定するllowed:テンプレート引数t
、それのタイプはレネクサ5月4日 `15の会議で
を推定される値が渡されることができることをtemplate <auto t>
ように、N4469は最終的に励ましとの要求を稼ぐことでトラクションを得ました標準委員会での改訂:http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4539.html#9
最初の改訂版P0127R0が1515年9月25日に提出されました。
フォローアップリビジョンが3月4日16:P0127R1で提出され、Concepts作業用ドラフトセクションの編集を提案しました。
P0127R2コンセプトがC++に含まれるかどうか不明であるため、作業草案の非コンセプトセクションのイディオム変更を完全に指定することに焦点を当てました。この改正は、6月23日'16でのC++ 17標準に受け入れられました:http://developerblog.redhat.com/2016/07/13/red-hat-iso-c-standards-meeting-june-2016-core-language/
だから、C++ 17の到着とあなたがtemplate <typename T, T t>
イディオムや使用を処分することができるようになります:
template <auto t>
struct tpl{
tpl(){ cout << typeid(decltype(t)).name() << ": " << t << endl; }
};
誰かが好奇心を持っていた場合、Visual Studioは 'type_info :: raw_name()'を使用してmangled名を出力します。これは 'type_info :: name()'のGCC出力名に似ています。 –
'f
@JimVあなたが話していることは、特殊化です(今は可能です)。この質問は 'template
- 1. 私はこのような配列を、持っていると仮定PHP
- 2. 私はこのコードを持っていると仮定し
- 3. は、私はこのようないくつかのコードを持っていると仮定jQueryの
- 4. は、私のような可変の持っていると仮定すると、ビット演算子に
- 5. プリント出力、私はこのコードを持っていると仮定しHaskellの
- 6. C3P0私は、次のコードを持っていると仮定するとC3P0
- 7. は、私は、カスタムクラスを持っていると仮定すると
- 8. ウィケット - 私はこのようになり、そのマークアップを持っていると仮定すると、マークアップ要素
- 9. は、私がこのような構造を持っていると仮定するとPythonの
- 10. PythonのHTMLと私はこのようなコードを持って
- 11. は、私は、このようなコードを持っているデータフレームビュー
- 12. 私はこのような原子の配列を持っていると言うの原子
- 13. Angular2「これは」私はこのようなコード持っている未定義
- 14. 私はこのようなコードを持っている
- 15. 私は、このようなHTMLコードを持っているタグスクリプト
- 16. 私はこのような単純なJavaクラスを持っていると仮定XML
- 17. は、私は、次のスキーマを持っていると仮定し
- 18. は、私はこのようなデータを持っていると仮定しD3.js
- 19. TypeScriptに文字列ベースの列挙型が追加されたため、文字列リテラルを使用する理由はありますか?私はこのコードを持っている場合、私はコンパイラオプションnoImplicitReturnを持っていると仮定すると
- 20. 仮想テーブルのコンパイル時間の削除?私はこの階層を持っていると仮定すると
- 21. このように2要素の列挙型が残っていると仮定しますか?
- 22. 私はFAのアイコンを持っていると仮定し
- 23. 検索と私はこのようなコード持っているC#の
- 24. EFクエリは、私がこのようなエンティティフレームワーク4.2クラスを持っていると仮定するとすべての子コレクション
- 25. どのようにこのURLを持っていると仮定したURL
- 26. デルファイコピー・オン・ライト私はこのようなコードを持っている文字列
- 27. 分割列「は」と私はこのようなCSVファイルを持っている
- 28. は、なぜ私は/私はこのようなコードを持っているC
- 29. 私は、次のXMLファイルを持っていると仮定するとStreamReaderを
- 30. グループと私はこのようなデータフレーム持っているパンダ
このコードは、いくつかの問題の解決策のように見えます。何が問題ですか? –