日記的「駄目」プログラミング Yet Another Hacking Life

C++で他の型と同名のメンバ関数を宣言する方法

06.13.2010 · Posted in C++, プログラミング

確認はGCC4.4。

DataHolderというクラスがDataという型のm_Dataというメンバ変数を持つとき、Data()というメンバ関数でm_Dataの参照にアクセスさせたい。

class Data
{
  // some code
};

class DataHolder
{
public:
  // some code (constructor, destructor etc...)
  const Data& Data() const;
private:
  ::Data m_Data;
};

肝はメンバ変数m_Dataの型を::Dataとグローバル名前空間であることを明示すること。Data()という関数名を宣言した時点でDataという名前の解釈の仕方が型名から関数名になるのでスコープを指定しないと”Data m_Data;”が”関数名 変数名;”と解釈されてエラーになる。グローバル名前空間であることを明示すれば、グローバル名前空間にはDataという名前はclass Dataしかないため意図通り解釈される。m_Dataが他の名前空間にあるなら適宜書き換えればよい。

One Response to “C++で他の型と同名のメンバ関数を宣言する方法”

  1. I do not know if it’s just me or if everyone else experiencing problems with your site. It appears as if some of the written text on your posts are running off the screen. Can somebody else please comment and let me know if this is happening to them too? This could be a issue with my browser because I’ve had this happen before. Thanks

Leave a Reply