これは、投稿「C++ の隠し機能」で読んだサロゲート コール関数に似たソース コードです。
私を混乱させる唯一の部分は、それらの演算子のオーバーロードされた関数です。彼らはどのようなオペレーターですか?(それらは確かに通常の operator() のようには見えません。戻り値の型が指定されていないのに、なぜ関数ポインターを返すのでしょうか?
ありがとう!
template <typename Fcn1, typename Fcn2>
class Surrogate {
public:
Surrogate(Fcn1 *f1, Fcn2 *f2) : f1_(f1), f2_(f2) {}
// Overloaded operators.
// But what does this do? What kind of operators are they?
operator Fcn1*() { return f1_; }
operator Fcn2*() { return f2_; }
private:
Fcn1 *f1_;
Fcn2 *f2_;
};
void foo (int i)
{
std::cout << "foo: " << i << std::endl;
}
void bar (double i)
{
std::cout << "bar: " << i << std::endl;
}
int main ()
{
Surrogate<void(int), void(double)> callable(foo, bar);
callable(10); // calls foo
callable(10.1); // calls bar
return 0;
}