Comments (3)
Hi, can you share a snippet of the code that hit that error?
Getting a std::shared_ptr<T>
from the injector is supported, and as the documentation section you cited this injects the bound type T
(note that this is not std::shared_ptr<T>
).
If the factories return a std::shared_ptr<T>
, perhaps you attempted to bind a std::shared_ptr<T>
as opposed to binding a T?
That is not allowed, but if it's what you want you can wrap it in a struct, e.g.:
struct WrappedSharedPtr<typename T> {
std::shared_ptr<T> value;
};
Then this doesn't get the special std::shared_ptr behavior so you can bind a WrappedSharedPtr<T>
and then inject it.
from fruit.
Hi,
I had hoped to make my message a bit lit leaner by hiding the compile errors under a details tag, but I see this was probably just confusing, I will edit the message show that it shows up, instead of needing to be opened with a mouse click.
What I did was I went to the "Scaling Doubles Injection Test" and scaler.h
-
Edited line 29 substituting unique_ptr for shared_ptr
using ScalerFactory = std::function<std::shared_ptr<Scaler>(int)>;
Went to main.cpp
- Edited line 27 substituting unique_ptr for shared_ptr
std::shared_ptr<Scaler> scaler = scalerFactory(12.1);)
Whilst main.cpp compiled without errors, compiling scaler.cpp produced errors see first message which already contains the compile errors produced
from fruit.
I had hoped to make my message a bit lit leaner by hiding the compile errors under a details tag, but I see this was probably just confusing, I will edit the message show that it shows up, instead of needing to be opened with a mouse click.
Hi, yeah I saw the compile errors before too, it's the code you tried I was asking for.
(but that is in your last message, thanks)
You can make that work using registerFactory
, changing getScalerComponent
to be:
Component<ScalerFactory> getScalerComponent() {
return createComponent()
.registerFactory<std::shared_ptr<Scaler>(fruit::Assisted<double>, Multiplier*)>(
[](double factor, Multiplier* multiplier) {
return std::dynamic_pointer_cast<Scaler>(std::make_shared<ScalerImpl>(factor, multiplier));
})
.install(getMultiplierComponent);
}
(then you no longer need the INJECT/ASSISTED in the constructor, since Fruit no longer needs to call that directly)
from fruit.
Related Issues (20)
- Fruit does not build in Visual Studio Versions 2019, 2022 or 2022 Preview with CMake HOT 8
- what should I do to use a string as an annotion of some bind? HOT 3
- VS2022 Just My Code for Fruit Library fails using CMAKE HOT 6
- Create a fruit::Component by iterating over a list of fruit::Components HOT 7
- Can fruit be used with C language? HOT 2
- Handling lifetimes HOT 6
- Providing non-injected arguments to DI Objects HOT 14
- Build fails with Visual Studio 2022 with C++20 HOT 8
- Fruit with QT HOT 4
- Factories with reference types broken in fruit 3.7.0
- Generic binding? HOT 2
- Defining Factory Functions for Objects with Multiple Constructors HOT 11
- Replace boost HOT 1
- [Suggestion] ExtractFirstError meta function SHOULD be non-error safe HOT 2
- Can no longer build examples in VS2022 Preview built by Visual Studio, VS CMake builds OK HOT 7
- Examples miss virtual dtor
- bindInstance with copy HOT 13
- Understanding Compiler error messages in Fruit HOT 6
- Adding a special constructor to one implementation of an interface HOT 13
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from fruit.