2016-03-24 10 views
0

Um ein std :: Paar aus einer Zeichenfolge zu machen und eine gebundene Funktion ich es geschafft, zu folgern haben die folgendeauto/decltype Mit Array-Typ

auto f1 = std::make_pair(std::wstring(L"send_order"),std::bind(&RESTListener::send_order, this, std::placeholders::_1)); 
auto f2 = std::make_pair(std::wstring(L"on_cancel_order"), std::bind(&RESTListener::on_cancel_all, this, std::placeholders::_1)); 
auto connectors = std::array<decltype(f1),2>({ f1,f2 }); 

Gibt es eine Möglichkeit, um Auto zu tun, folgern die Art der Array weiter, so kann ich etwas entlang der Linien von

auto connectors = std::array<?????,2>({std::make_pair(std::wstring(L"send_order"),std::bind(&RESTListener::send_order, this, std::placeholders::_1)),std::make_pair(std::wstring(L"on_cancel_order"), std::bind(&RESTListener::on_cancel_all,this, std::placeholders::_1))}); 
+1

'auto connectors = {make_pair(), make_pair()};' gibt Ihnen eine 'std :: initializer_list'. Würde das helfen? – nwp

+0

Natürlich! Ich habe nicht an diese viel einfachere Lösung gedacht. Mein Verstand war Arrays, aber eine Liste ist genauso gut. – Ronnie

+0

Vorsicht mit 'initializer_list'; Es verlängert die Lebensdauer eines gebundenen Arrays nicht, wenn es kopiert wird –

Antwort

1

Wie durch die einfachere Lösung wies darauf hin, geben Sie @nwp ist, dass std :: erinnern initializer_list erstellt wird, wenn die automatische foo tun = {,}. Also eine prägnantere Lösung ist

auto connectors = {std::make_pair(std::wstring(L"send_order"),std::bind(&RESTListener::send_order, this, std::placeholders::_1)), 
        std::make_pair(std::wstring(L"on_cancel_order"), std::bind(&RESTListener::on_cancel_all, this, std::placeholders::_1)) };