問題タブ [pointer-to-member]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
315 参照

c++ - メンバーへのポインター関数の解決

以下は、オブジェクトのリストをフィルター処理するために使用されるファンクターです。さまざまな要素にアクセスする方法として、オブジェクトのクラスのメンバー関数へのポインターでインスタンス化する必要があります。

そして g++ はこれらのエラーを返します:

Filter.h: メンバー関数 'int Filter_Compare::eval(File&, File&) const': Filter.h:48:27: エラー: ' を使用する必要があります。'((const Filter_Compare*)this)->Filter_Compare::fun (...)' でメンバーへのポインタ関数を呼び出すには、' または '-> '、たとえば '(... ->* ((const Filter_Compare *)this)->Filter_Compare::fun) (...)' Filter.h:48:53: エラー: ' を使用する必要があります。'((const Filter_Compare*)this)->Filter_Compare::fun (...)' でメンバーへのポインタ関数を呼び出すには、' または '-> '、たとえば '(... ->* ((const Filter_Compare *)this)->Filter_Compare::fun) (...)'</p>

私はすでにエラーなしで別のクラスでこれを使用しているので、ここでは問題は見られません (まあ、少なくともコンパイルされましたが、今は実行できませんでした)。コードは次のとおりです。

lit_type eval(File& f) const { return f.*(this->fun()) - thValue; }

ここで何が間違っているのですか?別の方法でポインターを参照する方法がわかりません。ありがとう !

0 投票する
3 に答える
643 参照

c++ - (c++) このループを最適化する方法はありますか? クラス内で関数ポインタを使用することはできません

関数の最適化を試みていfun_a1()ます。変数jは のスコープでは変更されませんfun_a1()。したがって、「i」反復ごとに j==1 または 2 または 3 をチェックすることは、明らかに CPU サイクルの無駄です。しかし、条件評価をループの外に出そうとすると、条件ごとに冗長なループを書かなければなりません。C では、関数ポインターを使用してこれを簡単に解決できます。ただし、C++ は非静的関数へのポインターを許可しません。不思議な「メンバーへのポインター」を説明するリンクがいくつか見つかりました。(例 1例 2 ) しかし、オブジェクト自体の内部から、たとえば fun_a() の内部からどのように使用すればよいかはまだ明確ではありません。または、他の方法で最適化できますか?

0 投票する
4 に答える
7995 参照

c++ - テンプレートパラメータとしてのクラスメンバーへのポインタ

次のように、クラスメンバーへのポインタをテンプレートパラメータとして使用したいと思います。

このような構造体を使用すると問題なく動作しますが、とMyStruct<SomeClass, SomeResult, &SomeClass::value> variableを指定する必要があるのは好きではありません。SomeClassSomeResult

MyStruct<&SomeClass::value> variable可能であれば使用したいのですが、クラスをパスして結果タイプを取得する機能を失うことはありません。

次のことを試しましたが、構文が不正です。

エラー:テンプレートパラメータリストが多すぎます

ヘルパー関数を使用してみました(実際にはClangで機能しますが、GCCによって拒否されます)。

エラー:関数本体の外部でのパラメーター `member'の使用
エラー:テンプレート引数3が無効です

シンプルMyStruct<&SomeClass::value>にすることは可能ですか?もしそうなら、どのように?

私の質問を解決しなかった関連する質問:

0 投票する
3 に答える
1501 参照

c++ - データメンバへのポインタを void に変換 *

クラスまたは構造体のデータ メンバーへのポインターを取得できることはわかっていますが、次のコードの最後の行はコンパイルに失敗します。

ptt1 を another_ptr に変換できないのはなぜですか? ポインターについて話しているので、あるポインターは別のポインターと同様の次元を持つ必要があります (概念的には異なりますが)。

0 投票する
1 に答える
345 参照

c++ - struct without typedef - cannot use in a pointer-to-member

I have a simple structure and I want a pointer-to-member c. I'm using MSVC2012 and if I don't declare the struct abc as a type definition (typedef), I can't use it.. how come?

0 投票する
2 に答える
8616 参照

c++ - オブジェクトのメンバー関数はどこに保存されますか?

クラス/構造体とそれぞれのオブジェクトがメモリ内でどのように配置されるかを理解するためにC++で実験しており、クラス/構造体の各フィールドがそれぞれのオブジェクトへのオフセットであることを理解しました(したがって、メンバー変数ポインターを持つことができます)。

メンバー関数ポインターを持つことができても、次のコードが機能しない理由がわかりません。

私の質問は:なぜその行は

コンパイルして、構造体と行の先頭からの「c」フィールドのオフセットを返します

コンパイルすらしませんか?