首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >依赖注入注入参数

依赖注入注入参数
EN

Stack Overflow用户
提问于 2021-05-21 12:30:12
回答 1查看 84关注 0票数 1

我试图在我的项目中设置依赖注入(https://boost-ext.github.io/di/),并得到以下编译错误:“没有找到匹配的重载函数”和“无效的显式模板参数”。

我的测试设置如下

代码语言:javascript
复制
#include "di.hpp"
namespace di = boost::di;

class IA{
public:
    virtual void doSomething() = 0;
};

class IB{
public:
    virtual void doSomething() = 0;
};

class IC{
public:
    virtual void doSomething() = 0;
};

class A : public IA {
public:
    void doSomething() override {
    }
};

class B : public IB {
public:
    void doSomething() override {

    }
};

class C : public IC{
    std::shared_ptr<A> a_;
    std::shared_ptr<B> b_;
public:
    C(std::shared_ptr<A> a, std::shared_ptr<B> b) : a_(a), b_(b){}
    void doSomething() override {
    }
};

int main(int argc, char *argv[]) {

    const auto injector = di::make_injector(
            di::bind<IA>.to<A>(),
            di::bind<IB>.to<B>(),
            di::bind<IC>.to<C>()
    );
    auto test = injector.create<IC>();
}

以下是我的详细编译错误:

错误信息:'boost::ext::di::v1_2_0::core::injector,boost::ext::di::v1_2_0::core::dependency,boost::ext::di::v1_2_0::core::dependency,boost::ext::di::v1_2_0::core::dependency::create‘:没有找到与TConfig=boost::ext::di::v1_2_0::config、TScope=boost::ext::di::v1_2_0::scopes::deduce,TExpected=IA、T=A、TName=boost::ext::di::v1_2_0::no_name、TPriority=void匹配的重载函数“T boost::ext::di::v1_2_0::core::injector,boost::ext::di::v1_2_0::core::dependency”的无效显式模板参数boost::ext::di::v1_2_0::core::dependency,boost::ext::di::v1_2_0::core::dependency>::create(void) const‘with TConfig=boost::ext::di::v1_2_0::config,TScope=boost::ext::di::v1_2_0::scopes::deduce,TExpected=IA,T=A注意:参见'boost::ext::di::v1_2_0::core::injector,boost::ext::di::v1_2_0::core::dependency,boost::ext::di::v1_2_0::core::dependency>::create‘与TConfig=boost::ext::di::v1_2_0::config,TScope=boost::ext::di::v1_2_0::scopes::deduce,TExpected=IA,T=A,TName=boost::ext::di::v1_2_0::no_name,TPriority=void,TCtor=boost::ext::di::v1_2_0::core::none

你知道我做错了什么吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-05-21 12:51:13

你打电话是错的,它应该类似于:

代码语言:javascript
复制
auto test = injector.create<std::unique_ptr<IC>>();

演示

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67636890

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档