値を設定しながら関数を呼び出したい。例えば:
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.
代入時に関数呼び出しをトリガーする必要がある場合は、代入演算子をオーバーライドするクラスで型をラップできます。これは単なる例であり、スタイルガイドではありません:)
#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
123
次のように、関数に渡し、その関数の戻り値を に格納したいようですねi
。
int i = func(123);
これが機能するには、次のfunc
ようになります。
int func(int val)
{
// ...
return /* ... */;
}
しかし、あなたの質問を解読するのは難しいので、これは完全にあなたが望むものではないかもしれません.
をオーバーロードすることはできません。$
実際$
には 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;
}