std::bind
とstd::visit
を一緒に使用して、訪問者がバインドされている場所で機能を取得しようとしています。std :: bindをstd :: visitで使用する
「オーバーロードされた機能のインスタンスがありません」が表示されていますが、バインドに関して何が間違っているのかわかりません。
std::bind
を利用して訪問者を獲得するにはどうすればよいですか?
#include <variant>
#include <functional>
#include <iostream>
using Somenum = std::variant<uint64_t, double>;
struct Visitor {
uint64_t operator()(const uint64_t& num) const {
return num;
}
uint64_t operator()(const double& num) const{
return 5;
}
};
int main(int argc, char **argv) {
const Somenum a = 3.0;
const Somenum b = (uint64_t)6;
const Visitor v{};
const auto f = std::bind(std::visit<Visitor, Somenum>, v, std::placeholders::_1);
const auto f2 = [&v](Somenum x) {
return std::visit(v, x);
};
std::cout << f(a) << std::endl << f(b)<< std::endl;
std::cout << f2(a) << std::endl << f2(b) << std::endl;
return 0;
}
効果的に私は、同じ動作f
はすべてがコンパイルすることができますと呼ばれている行を削除
を持っているf
とf2
をしたいと思います。
値を取得するために 'std :: get(s)'を実行する必要はありませんか? おそらく 'std :: possess_alternative (s)'は、バリアントがそのタイプを保持しているかどうかをチェックするでしょうか?同様に 'double'と同様です。 –
Eljay
そうは思わない。私はどこでそれをするべきですか? std :: visitは私が思っていることを処理することになっています。 – Bomaz
ラムダの代わりに 'std :: bind'を使用したいのはなぜですか?最初の場所でラムダの必要性を示す手助けとなった古いものと、C++ 1zの最新の魅力をミックスしています。 – metal