-5

値を設定しながら関数を呼び出したい。例えば:

int i;
i = 123; //Here i want to call a function. 
//Want to do this:
//i = 123;func();
//But i do not want to do like this.

これを実行できる新しいオペレーターを追加できますか?

int i;
i $ 123; //set i = 123 and call a function.
4

3 に答える 3

1

代入時に関数呼び出しをトリガーする必要がある場合は、代入演算子をオーバーライドするクラスで型をラップできます。これは単なる例であり、スタイルガイドではありません:)

#include <iostream>

template<class T> class wrap
{
private:
  T value;
  void (*fn)();
public:
  wrap(void (*_fn)()) { fn=_fn; }
  T& operator=(const T& in) { value = in; fn(); return value;}

  operator T() { return value; }
};

void func() {
  std::cout << "func() called!" << std::endl;
}

int main(void)
{
  wrap<int> i(func);
  i=5;                           // Assigns i and calls func()
  std::cout << i << std::endl;   // i is still usable as an int
}

> Output: 
>   func() called!
>   5
于 2013-05-19T16:59:28.683 に答える
1

123次のように、関数に渡し、その関数の戻り値を に格納したいようですねi

int i = func(123);

これが機能するには、次のfuncようになります。

int func(int val)
{
  // ...
  return /* ... */;
}

しかし、あなたの質問を解読するのは難しいので、これは完全にあなたが望むものではないかもしれません.

于 2013-05-19T16:45:00.140 に答える
0

をオーバーロードすることはできません。$実際$には C++ 演算子ではありません。(たとえそれが演算子だったとしても、オーバーロード可能な演算子のリストにはありません)。

さらに、 の演算子をオーバーロードすることはできませんint。クラスの演算子をオーバーロードする必要があります。

均一な方法が必要な場合は、次の簡単な方法を試してください。

class Integer {
    int x;
public:
    Integer(int x = 0) : x(x) {}

    operator int() {
        return x;
    }

    void operator^(int i) {
        x = i;
        func();
    }
};

int main()
{
    Integer i;
    i ^ 123;

    std::cout << i << std::endl;
}
于 2013-05-19T16:51:51.647 に答える