2016-11-22 10 views
-1

クラス自体を指し示すようにクラスへのポインタを割り当てる方法はありますか?自分自身に "ポインタへのポインタ"を割り当てる

これは、クラスポインタのインスタンスへのメンバポインタの適用結果が、まったく同じインスタンスへの参照になることを意味します。

例:

struct SFoo {}; 

constexpr SFoo SFoo::* MP_foo = &SFoo:: MYSELF; 
// Is there some syntax I can use here? --^ 

私はこれは私が任意のテンプレート型の要素のコンテナ上で動作ソートアルゴリズムを持っているしたい理由。ソートキーは、指定されたポインタへのポインタを使用して各要素から取得されます。

しかし、ここでは、要素がのコンテナをキーとしてにソートしたいと考えています。したがって、私は、(クラスがそれ自身のメンバであるかのように)メンバポインタポイントをそれ自身にする必要があります。

私が使用できる簡単な(そしてコストのかかる)ハックはたくさんありますが(私は今使っていますが)、文法のトリックがあるかどうかを知りたい場合は、の右に way - 余計なコードを避けるためです。

+6

これは意味をなさない。クラスメンバへのポインタは、クラスメンバへのポインタです。それがクラスメンバーへのポインタになり、クラス自体のインスタンスのような、他のものへのポインタにはなりません。私はそれがクラスメンバーへのポインタだと言いましたか? –

+2

あなたはコンストラクタのアドレスを取ることができません – Danh

+2

これは[XYproblem](http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)であり、私はあなたがYなぜあなたはそれを必要としているのですか(いくつかのソート、はい、正確に何がソートされているか)、「簡単な(そしてゼロコストの)ハック」があります。それらの問題は何ですか?彼らが簡単でコストがゼロの場合、なぜあなたはそれらを使いたくないのですか? – user463035818

答えて

1

残念ながら、質問はあまり明確ではありませんが(-1は私のものではありません)。私の印象は、ソートされるオブジェクトのタイプ(あなたの場合はSFoo)とソートキーのタイプを混乱させることです。典型的な状況では、それらは異なっている。例:ソートされるユーザ(オブジェクト)とソートキーは、姓と名(文字列のペア)です。並べ替えキーのタイプを直接記述しているわけではありません。

構文的にSFoo SFoo::* MP_fooは、タイプがSFooのインスタンスフィールドへのポインタです。 C++ではこれが許可されていません。そうしないと、無限再帰が発生します。このフィールドにはSFooフィールドがあり、その内部フィールドにはこのフィールドが再度必要です。

第2に、関数へのポインタを持つデータへのポインタを初期化しようとしています。コンストラクタSFoo::SFooは関数です。コメントに記載されているように、ctorsのアドレスは許可されていません。

もう1つの試み:クラスのインスタンスにメンバーポインタを適用することは、まったく同じインスタンスへの参照になります。

メンバーへのポインタはメンバーを指します。オブジェクトはメンバーではありません。 C++がどのように定義されているかは、良いか悪いかです。メモリレイアウトの観点から、それらが同一になることを

struct SFoo2 
{ 
    SFoo m_data_field; 
}; 

注:

あなたはラッパークラスのようなものを定義しようとするかもしれません。 SFoo2は、タイプSFooのメンバへのポインタを持つことができます。私はこれがあなたの文脈でうまくいくかどうかはわかりませんが、試してみてください。

+0

私は答えが「いいえ」と思う。しかし、問題のどの部分がわからないのか教えていただけますか? //ソートされたオブジェクト_がキーの場合。これは、文字列を含むオブジェクトではなく、値によって文字列のセットをソートするようなものです。しかし、私のソートコードはメンバポインタを念頭に置いて書かれています。 // SFoo :: SFooはctor(通常)を意味しますが、私の意図を伝える最も良い方法だと感じました。 – xaxazak

+0

うまくいけば正しい方向にいくつかの説明をしました。 – xaxazak

+0

"メンバーへのポインタはメンバーを指しています。オブジェクトはメンバーではありません.C++がどのように定義されているかは問題ありません"。基本的に、私はそれを許すことに何か悪いことがあると確信しています(自己参照と自己再帰はAFAICTには問題ありません)。 – xaxazak

関連する問題