を通じて過負荷にファンクタを実現:は、いくつかの既存のファンクタ所定の組成物
struct incr {
int operator()(int x) const { return x + 1; }
};
struct rep_str {
std::string operator()(const std::string& s) const { return s + s; }
};
それはこのような何かを達成することが可能だ場合、私は思ったんだけど:
auto f = overload<fa, fb, fc, ...>();
// or...
auto g = overload<fa, overload<fb, overload<fc, ...>>>();
:
auto f = overload<incr, rep_str>();
f(1); // returns 2
f("hello"); // returns "hellohello"
複数のオーバーロードは次のようになります。
SFINAEをstd::result_of_t
などで使用していると思われます。 t、しかし、どのように考え出していない。ただ、すべての引数を継承し、基底クラスからoperator()
に持参する使用して、宣言を使用します。
3つのオーバーロードの構成は、この構文でどのように機能しますか? 'overload>'?または 'overload < X, Y, Z >'? –
@XerenNarcy私は両方のデザインがうまくいくと思います。 'overload>'はネストされたペアのように見えますが、 'overload 'はタプルを思い出させます(overload_catなど)。 –
標準にそのようなものを得るための[proposal](http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/p0051r0.pdf)さえあります。それはC++ 17の準備ができていませんでしたが、C++ 20のための準備が整いました。 [参考実装]もあります(https://github.com/viboes/tags/blob/master/include/yafpl/v1/functional/overload.hpp) –