タグ付けされた質問 「metaprogramming」

メタプログラミングは、マクロやメタクラスと同様に、プログラミング環境を再プログラミングする機能です。

11
コンパイル時の文字列ハッシュ
C ++ 11の新しい文字列リテラルを使用すると、コンパイル時に文字列のハッシュを計算できる可能性があることをいくつかの場所で読んだことがあります。しかし、誰も出てきて、それが可能であるか、どのように行われるかを言う準備ができていないようです。 これは可能ですか? オペレーターはどのように見えますか? このようなユースケースに特に興味があります。 void foo( const std::string& value ) { switch( std::hash(value) ) { case "one"_hash: one(); break; case "two"_hash: two(); break; /*many more cases*/ default: other(); break; } } 注:コンパイル時のハッシュ関数は、私が書いたとおりに見える必要はありません。最終的なソリューションがどのようになるかを推測するために最善を尽くしましたmeta_hash<"string"_meta>::valueが、実行可能なソリューションになる可能性もあります。

2
名前を指定してインスタンス変数の値を取得する
一般に、名前が文字列に含まれるオブジェクトへの参照を取得するにはどうすればよいですか? より具体的には、パラメーター名のリストがあります(メンバー変数-動的に構築されているため、直接参照することはできません)。 各パラメーターは、from_sメソッドも持つオブジェクトです。 私は次のようなことをしたい(もちろんそれはうまくいきません...): define_method(:from_s) do | arg | @ordered_parameter_names.each do | param | instance_eval "field_ref = @#{param}" field_ref.from_s(param) end end



4
Pythonクラスの__dict __.__ dict__属性とは何ですか?
>>> class A(object): pass ... >>> A.__dict__ <dictproxy object at 0x173ef30> >>> A.__dict__.__dict__ Traceback (most recent call last): File "<string>", line 1, in <fragment> AttributeError: 'dictproxy' object has no attribute '__dict__' >>> A.__dict__.copy() {'__dict__': <attribute '__dict__' of 'A' objects> ... } >>> A.__dict__['__dict__'] <attribute '__dict__' of 'A' objects> # What …

30
PythonとRubyのメタプログラミング[終了]
現在のところ、この質問はQ&A形式には適していません。私たちは回答が事実、参考文献、または専門知識によってサポートされることを期待しますが、この質問はおそらく議論、議論、投票、または拡張された議論を誘います。この質問を改善でき、再開できると思われる場合は、ヘルプセンターにアクセスしてください。 8年前に閉鎖。 私は現在主にDプログラマーであり、ツールボックスに別の言語を追加しようとしています。できれば、Dのような静的にコンパイルされた言語では実行できないメタプログラミングハックをサポートする言語を追加してください。 Lispについて少し読んだので、Lispの優れた機能のいくつかを可能にする言語を見つけたいと思いますが、Lispの奇妙な構文などはありません。言語の炎上戦争を開始したくないので、RubyとPythonの両方にトレードオフがあると確信しているので、個人的に重要なことをリストします。Ruby、Python、その他の言語のどちらが最適か教えてください。 重要: 良いメタプログラミング。実行時にクラス、メソッド、関数などを作成する機能。できれば、コードとデータの区別を最小限にとどめる、Lispスタイル。 素晴らしく、クリーンで、健全な構文と、一貫性のある直感的なセマンティクス。基本的に、よく考えられた、楽しくて使える現代的な言語です。 複数のパラダイム。すべてのプロジェクト、またはプロジェクト内のすべての小さな副問題でさえ、1つのパラダイムが適切ではありません。 プログラミングについての考え方に実際に影響を与える興味深い言語。 やや大事な: パフォーマンス。パフォーマンスがまともならいいのですが、パフォーマンスを優先する場合は、代わりにDを使用します。 十分に文書化されています。 重要ではありません: コミュニティーのサイズ、ライブラリーの可用性など。これらはどれも言語自体の特性ではなく、すべてが非常に急速に変化する可能性があります。 ジョブの可用性。私はフルタイムのプロのプログラマではありません。私は大学院生であり、プログラミングは私の研究に正接しています。 100万人のコードモンキーが取り組んでいる非常に大規模なプロジェクトで主に設計された機能。

6
(機能的?)プログラミングの文脈で「具体化」と「具体化」はどういう意味ですか?
Haskellと関数型プログラミングに関するブログ(特にsigfpeのブログ)でこの用語をよく読んでいますが、それが何を意味するのかわかりません。私はほとんどの場合それを知らなくても大丈夫ですが、私が知っていれば、おそらくテキストをもっとよく理解していたでしょう。グーグルは私を助けませんでした。私は技術的なもので迷子になります。 また、世界の非技術的な意味(「抽象的対象を変える」)は、コードで何かを具体化することが実際に何を意味するのかを理解するのに役立ちません。 私はコンピュータサイエンスの概念が少し遅いので、コードを使った実用的な例がいいでしょう。:P


3
関数が定義されているタイプに対してのみ、関数テンプレート内で関数を実行します
入力としてさまざまなタイプを受け取る関数テンプレートがあります。それらのタイプのうち、そのうちの1つだけがgetInt()機能を持っています。したがって、コードでそのタイプに対してのみ関数を実行する必要があります。解決策を提案してください。ありがとう #include <type_traits> #include <typeinfo> class X { public: int getInt(){ return 9; } }; class Y{ }; template<typename T> void f(T& v){ // error: 'class Y' has no member named 'getInt' // also tried std::is_same<T, X>::value if(typeid(T).name() == typeid(X).name()){ int i = v.getInt();// I want this to be called …

4
C ++メタプログラミングですべてのテンプレートを使用していますか?
私はメタプログラミングが一般的であり、特にそれがC ++で何であるかを理解しようとしています。c ++メタプログラミングを検索すると、テンプレートメタプログラミング(TMP)のチュートリアルは表示されますが、テンプレートの特定の使用法またはテンプレートのすべての使用法のみが分類されているかどうかの説明はありません。 私の質問は、C ++でのテンプレートのすべての使用がメタプログラミングとして分類されるかどうかです。それがなぜなのか、そうでないのかについての説明も役に立ちます。ありがとうございました。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.