Skip to content

Inject std::vector<std::shared_ptr<T>> #569

Open
@KilianBl

Description

@KilianBl

Expected Behavior

di.hpp should not cause compilation errors or inject empty vectors

Actual Behavior

boost::di::bind<Base*[]>().to({std::make_shared<Derived>(1), std::make_shared<Derived>(2)}) -> cannot pass initializer list to variadic method compilation error

boost::di::bind<Base*[]>().to(vec) -> an empty vector is injected

Steps to Reproduce the Problem

#include <iostream>

#include "di.hpp"

struct Base {
};

struct Derived : Base {
    explicit Derived(const int integer) {
        std::cout << integer << std::endl;
    }
};

struct Test {
    explicit Test(std::vector<std::shared_ptr<Base>> vec) {
        std::cout << vec.size() << std::endl;
    }
};

int main() {
    std::vector<std::shared_ptr<Base>> vec{std::make_shared<Derived>(1), std::make_shared<Derived>(2)};

    const auto injector = boost::di::make_injector(
        // boost::di::bind<Base *[]>().to({std::make_shared<Derived>(1), std::make_shared<Derived>(2)}),
        boost::di::bind<Base *[]>().to(vec));

    std::ignore = injector.create<Test>();

    return 0;
}

Am I doing something wrong? Is there any alternative to get what I need?

Specifications

  • Version: 1.3.0
  • Platform: macOS
  • Compiler: Apple clang version 14.0.3 (clang-1403.0.22.14.1)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions