// // Copyright (c) 2012-2020 Kris Jusiak (kris at jusiak dot net) // // Distributed under the Boost Software License, Version 1.0. // (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) // #include "boost/di/extension/injections/assisted_injection.hpp" #include #include #include #include namespace di = boost::di; //<- struct interface { virtual ~interface() noexcept = default; virtual void dummy() = 0; }; struct implementation : interface { void dummy() override {} }; struct example { /*<>*/ BOOST_DI_INJECT(example, (named = di::extension::assisted) int date /*from assisted_injection*/ , std::unique_ptr up /*from injector*/ , (named = di::extension::assisted) double factor /*from assisted_injection*/ , (named = di::extension::assisted) std::string str /*from assisted_injection*/ , int i /*from injector*/) { assert(i == 87); assert(dynamic_cast(up.get())); assert(date == 42); assert(factor == 123.0); assert(str == "str"); } }; //-> int main() { /*<>*/ using example_assisted_injection = std::function(int, double, std::string)>; // clang-format off auto injector = di::make_injector( di::bind().to(87) , di::bind().to() /*<>*/ , di::bind().to(di::extension::assisted_injection()) ); // clang-format on auto f = injector.create(); f(42, 123.0, "str"); }