1

ここにいる人たちがこのような質問を気にしないことを心から願っています。何度も検索した後、おそらく間違った検索用語で-それにもかかわらず-私はこれについて何も見つけることができないようです。はい、cplusplusのドキュメントを調べましたが、それでも答えを見つけることができませんでした。

私の質問は単純ですが、関数を別の関数を介してのみ呼び出すことができるようにするにはどうすればよいですか?

これが例です

class someclas{
public:
void screen():
void setsomevariable (int somevariable){}
}clas;

また、関数setsomevariable()を呼び出すと、screen関数を呼び出した後にのみ使用できるようになります。そのような:

clas.screen().setsomevariable(..);

繰り返しますが、この関数をscreen()だけのメンバーにするにはどうすればよいですか?

4

2 に答える 2

1

これは要件に一致しますが、必ずしもニーズを満たすとは限りません。もっと助けたいのですが、あなたは頑固に詳細を提供することを拒否しています...

class Screen {
    public:
    void setsomevariable (int somevariable) {}
};

class someclas {
    Screen s;
    public:
    Screen& screen() { return s; }
} clas;
于 2012-09-29T11:20:57.887 に答える
0

メンバー関数はクラスに属しています。関数を別の関数のメンバーにすることはできません。

クラスにブール値を保持し、以前にscreenが呼び出されなかった場合は、例外をスローすることができます。しかし、それは醜い解決策です。

class someclas{
public:
  someclas & screen() { // returns a reference to your class to enable the clas.screen().setsomevariable() syntax
    screenCalled = true;
    return *this;
  }
  void setsomevariable (int somevariable){
    if (!screenCalled) {
      throw std::exception();
    }
    // some code
    screenCalled = false;
  }
  bool screenCalled;
}clas;
于 2012-09-29T11:14:02.010 に答える