Using parameterized constructor for Injection
rhythmize opened this issue · comments
Rhythm Chopra commented
How can I use a parameterized constructor with INJECT
macro or registerConstructor()
?
The parameters can be primitive data types.
class GreeterImpl {
private:
int value;
Writer* writer;
public:
INJECT(GreeterImpl(Writer* writer, ASSISTED(int) val))
: writer(writer), value(val) {
}
virtual void greet() {
writer->write("Hello world!\n");
}
};
fruit::Component<Greeter> getGreeterComponent() {
return fruit::createComponent();
}
On compilation, I get following error at fruit::createComponent()
invalid use of incomplete type 'struct fruit::impl::meta::IsInjectableBareType::applyfruit::impl::meta::None'
Please suggest
poletti-marco commented
You're looking for assisted injection, see
https://github.com/google/fruit/wiki/tutorial:-assisted-injection
and
https://github.com/google/fruit/wiki/quick-reference#factories-and-assisted-injection
If the first error is that one it could be improved though.
Could you please post the whole compiler output, or at least all compiler
output until the error you mentioned?
…On Thu, 30 Jan 2020, 08:07 Rhythm Chopra, ***@***.***> wrote:
From getting started example
<https://github.com/google/fruit/wiki/tutorial:-getting-started>.
How can I use a parameterized constructor with INJECT macro or
registerConstructor()?
The parameters can be primitive data types.
class GreeterImpl {
private:
int value;
Writer* writer;
public:
INJECT(GreeterImpl(Writer* writer, ASSISTED(int) val))
: writer(writer), value(val) {
}
virtual void greet() {
writer->write("Hello world!\n");
}
};
fruit::Component<Greeter> getGreeterComponent() {
return fruit::createComponent();
}
On compilation, I get following error at fruit::createComponent()
invalid use of incomplete type 'struct
fruit::impl::meta::IsInjectableBareType::applyfruit::impl::meta::None'
Please suggest
—
You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub
<#96?email_source=notifications&email_token=AALZ4FYESNQ6K7GQ7RVBG23RAL3NVA5CNFSM4KNYU4OKYY3PNVWWK3TUL52HS4DFUVEXG43VMWVGG33NNVSW45C7NFSM4IJ4HHKQ>,
or unsubscribe
<https://github.com/notifications/unsubscribe-auth/AALZ4FZKCCVNNDOGR6T3BFLRAL3NVANCNFSM4KNYU4OA>
.
Rhythm Chopra commented
In file included from /usr/local/include/fruit/impl/meta/vector.h:21:0,
from /usr/local/include/fruit/impl/meta/immutable_set.h:22,
from /usr/local/include/fruit/impl/meta/set.h:21,
from /usr/local/include/fruit/impl/injection_errors.h:21,
from /usr/local/include/fruit/fruit.h:25,
from main.cpp:12:
/usr/local/include/fruit/impl/meta/eval.h: In instantiation of ‘struct fruit::impl::meta::DoEval<fruit::impl::meta::IsInjectableBareType(fruit::impl::meta::NormalizeType (*)(fruit::impl::meta::Type<fruit::Assisted<int> >))>’:
/usr/local/include/fruit/impl/meta/eval.h:117:87: required from ‘struct fruit::impl::meta::DoEval<fruit::impl::meta::IsInjectableType (*)(fruit::impl::meta::Type<fruit::Assisted<int> >)>’
/usr/local/include/fruit/impl/meta/logical_operations.h:33:23: required from ‘struct fruit::impl::meta::DoEval<fruit::impl::meta::Not (*)(fruit::impl::meta::IsInjectableType (*)(fruit::impl::meta::Type<fruit::Assisted<int> >))>’
/usr/local/include/fruit/impl/meta/eval.h:202:102: required from ‘struct fruit::impl::meta::DoEval<fruit::impl::meta::If(fruit::impl::meta::Not (*)(fruit::impl::meta::IsInjectableType (*)(fruit::impl::meta::Type<fruit::Assisted<int> >)), fruit::impl::meta::ConstructError (*)(fruit::impl::NonInjectableTypeErrorTag, fruit::impl::meta::Type<fruit::Assisted<int> >), fruit::impl::meta::None)>’
/usr/local/include/fruit/impl/meta/eval.h:117:87: required from ‘struct fruit::impl::meta::DoEval<fruit::impl::meta::CheckInjectableType (*)(fruit::impl::meta::Type<fruit::Assisted<int> >)>’
/usr/local/include/fruit/impl/meta/eval.h:236:106: required from ‘struct fruit::impl::meta::DoEval<fruit::impl::meta::PropagateError(fruit::impl::meta::CheckInjectableType (*)(fruit::impl::meta::Type<fruit::Assisted<int> >), fruit::impl::meta::None)>’
/usr/local/include/fruit/impl/meta/eval.h:102:87: [ skipping 35 instantiation contexts, use -ftemplate-backtrace-limit=0 to disable ]
/usr/local/include/fruit/impl/meta/eval.h:117:87: required from ‘struct fruit::impl::meta::DoEval<fruit::impl::meta::ComponentFunctor::apply<fruit::impl::meta::ConvertComponent, fruit::impl::meta::Comp<fruit::impl::meta::Vector<>, fruit::impl::meta::Vector<fruit::impl::meta::Type<Greeter> >, fruit::impl::meta::Vector<fruit::impl::meta::Type<Greeter> >, fruit::impl::meta::Vector<fruit::impl::meta::Pair<fruit::impl::meta::Type<Greeter>, fruit::impl::meta::Vector<> > >, fruit::impl::meta::Vector<>, fruit::impl::meta::EmptyList> >::type (*)(fruit::impl::meta::GetResult (*)(fruit::impl::meta::ProcessDeferredBindings (*)(fruit::impl::meta::Comp<fruit::impl::meta::Vector<>, fruit::impl::meta::Vector<>, fruit::impl::meta::Vector<>, fruit::impl::meta::Vector<>, fruit::impl::meta::Vector<>, fruit::impl::meta::EmptyList>)))>’
/usr/local/include/fruit/impl/meta/eval.h:249:106: required from ‘struct fruit::impl::meta::DoEval<fruit::impl::meta::PropagateError (*)(fruit::impl::meta::ComponentFunctor::apply<fruit::impl::meta::ConvertComponent, fruit::impl::meta::Comp<fruit::impl::meta::Vector<>, fruit::impl::meta::Vector<fruit::impl::meta::Type<Greeter> >, fruit::impl::meta::Vector<fruit::impl::meta::Type<Greeter> >, fruit::impl::meta::Vector<fruit::impl::meta::Pair<fruit::impl::meta::Type<Greeter>, fruit::impl::meta::Vector<> > >, fruit::impl::meta::Vector<>, fruit::impl::meta::EmptyList> >::type (*)(fruit::impl::meta::GetResult (*)(fruit::impl::meta::ProcessDeferredBindings (*)(fruit::impl::meta::Comp<fruit::impl::meta::Vector<>, fruit::impl::meta::Vector<>, fruit::impl::meta::Vector<>, fruit::impl::meta::Vector<>, fruit::impl::meta::Vector<>, fruit::impl::meta::EmptyList>))), fruit::impl::meta::Compose2ComponentFunctors::apply<fruit::impl::meta::ProcessDeferredBindings, fruit::impl::meta::ComponentFunctor::apply<fruit::impl::meta::ConvertComponent, fruit::impl::meta::Comp<fruit::impl::meta::Vector<>, fruit::impl::meta::Vector<fruit::impl::meta::Type<Greeter> >, fruit::impl::meta::Vector<fruit::impl::meta::Type<Greeter> >, fruit::impl::meta::Vector<fruit::impl::meta::Pair<fruit::impl::meta::Type<Greeter>, fruit::impl::meta::Vector<> > >, fruit::impl::meta::Vector<>, fruit::impl::meta::EmptyList> >::type>::type::apply<fruit::impl::meta::Comp<fruit::impl::meta::Vector<>, fruit::impl::meta::Vector<>, fruit::impl::meta::Vector<>, fruit::impl::meta::Vector<>, fruit::impl::meta::Vector<>, fruit::impl::meta::EmptyList> >::Op)>’
/usr/local/include/fruit/impl/meta/eval.h:220:51: required from ‘struct fruit::impl::meta::EvalPropagateError<fruit::impl::meta::ComponentFunctorIdentity::apply<fruit::impl::meta::Comp<fruit::impl::meta::Vector<>, fruit::impl::meta::Vector<>, fruit::impl::meta::Vector<>, fruit::impl::meta::Vector<>, fruit::impl::meta::Vector<>, fruit::impl::meta::EmptyList> >::type, fruit::impl::meta::PropagateError (*)(fruit::impl::meta::ComponentFunctor::apply<fruit::impl::meta::ConvertComponent, fruit::impl::meta::Comp<fruit::impl::meta::Vector<>, fruit::impl::meta::Vector<fruit::impl::meta::Type<Greeter> >, fruit::impl::meta::Vector<fruit::impl::meta::Type<Greeter> >, fruit::impl::meta::Vector<fruit::impl::meta::Pair<fruit::impl::meta::Type<Greeter>, fruit::impl::meta::Vector<> > >, fruit::impl::meta::Vector<>, fruit::impl::meta::EmptyList> >::type (*)(fruit::impl::meta::GetResult (*)(fruit::impl::meta::ProcessDeferredBindings (*)(fruit::impl::meta::Comp<fruit::impl::meta::Vector<>, fruit::impl::meta::Vector<>, fruit::impl::meta::Vector<>, fruit::impl::meta::Vector<>, fruit::impl::meta::Vector<>, fruit::impl::meta::EmptyList>))), fruit::impl::meta::Compose2ComponentFunctors::apply<fruit::impl::meta::ProcessDeferredBindings, fruit::impl::meta::ComponentFunctor::apply<fruit::impl::meta::ConvertComponent, fruit::impl::meta::Comp<fruit::impl::meta::Vector<>, fruit::impl::meta::Vector<fruit::impl::meta::Type<Greeter> >, fruit::impl::meta::Vector<fruit::impl::meta::Type<Greeter> >, fruit::impl::meta::Vector<fruit::impl::meta::Pair<fruit::impl::meta::Type<Greeter>, fruit::impl::meta::Vector<> > >, fruit::impl::meta::Vector<>, fruit::impl::meta::EmptyList> >::type>::type::apply<fruit::impl::meta::Comp<fruit::impl::meta::Vector<>, fruit::impl::meta::Vector<>, fruit::impl::meta::Vector<>, fruit::impl::meta::Vector<>, fruit::impl::meta::Vector<>, fruit::impl::meta::EmptyList> >::Op)>’
/usr/local/include/fruit/impl/meta/eval.h:236:106: required from ‘struct fruit::impl::meta::DoEval<fruit::impl::meta::PropagateError(fruit::impl::meta::ProcessDeferredBindings (*)(fruit::impl::meta::Comp<fruit::impl::meta::Vector<>, fruit::impl::meta::Vector<>, fruit::impl::meta::Vector<>, fruit::impl::meta::Vector<>, fruit::impl::meta::Vector<>, fruit::impl::meta::EmptyList>), fruit::impl::meta::PropagateError (*)(fruit::impl::meta::ComponentFunctor::apply<fruit::impl::meta::ConvertComponent, fruit::impl::meta::Comp<fruit::impl::meta::Vector<>, fruit::impl::meta::Vector<fruit::impl::meta::Type<Greeter> >, fruit::impl::meta::Vector<fruit::impl::meta::Type<Greeter> >, fruit::impl::meta::Vector<fruit::impl::meta::Pair<fruit::impl::meta::Type<Greeter>, fruit::impl::meta::Vector<> > >, fruit::impl::meta::Vector<>, fruit::impl::meta::EmptyList> >::type (*)(fruit::impl::meta::GetResult (*)(fruit::impl::meta::ProcessDeferredBindings (*)(fruit::impl::meta::Comp<fruit::impl::meta::Vector<>, fruit::impl::meta::Vector<>, fruit::impl::meta::Vector<>, fruit::impl::meta::Vector<>, fruit::impl::meta::Vector<>, fruit::impl::meta::EmptyList>))), fruit::impl::meta::Compose2ComponentFunctors::apply<fruit::impl::meta::ProcessDeferredBindings, fruit::impl::meta::ComponentFunctor::apply<fruit::impl::meta::ConvertComponent, fruit::impl::meta::Comp<fruit::impl::meta::Vector<>, fruit::impl::meta::Vector<fruit::impl::meta::Type<Greeter> >, fruit::impl::meta::Vector<fruit::impl::meta::Type<Greeter> >, fruit::impl::meta::Vector<fruit::impl::meta::Pair<fruit::impl::meta::Type<Greeter>, fruit::impl::meta::Vector<> > >, fruit::impl::meta::Vector<>, fruit::impl::meta::EmptyList> >::type>::type::apply<fruit::impl::meta::Comp<fruit::impl::meta::Vector<>, fruit::impl::meta::Vector<>, fruit::impl::meta::Vector<>, fruit::impl::meta::Vector<>, fruit::impl::meta::Vector<>, fruit::impl::meta::EmptyList> >::Op))>’
/usr/local/include/fruit/impl/meta/eval.h:102:87: required from ‘struct fruit::impl::meta::DoEval<fruit::impl::meta::Call(fruit::impl::meta::ReverseComposeFunctors (*)(fruit::impl::meta::ComponentFunctor (*)(fruit::impl::meta::ConvertComponent, fruit::impl::meta::Comp<fruit::impl::meta::Vector<>, fruit::impl::meta::Vector<fruit::impl::meta::Type<Greeter> >, fruit::impl::meta::Vector<fruit::impl::meta::Type<Greeter> >, fruit::impl::meta::Vector<fruit::impl::meta::Pair<fruit::impl::meta::Type<Greeter>, fruit::impl::meta::Vector<> > >, fruit::impl::meta::Vector<>, fruit::impl::meta::EmptyList>), fruit::impl::meta::ProcessDeferredBindings), fruit::impl::meta::ConstructComponentImpl (*)())>’
/usr/local/include/fruit/impl/meta/eval.h:253:45: required by substitution of ‘template<class MetaExpr> using Eval = typename fruit::impl::meta::DoEval::type [with MetaExpr = fruit::impl::meta::Call(fruit::impl::meta::ReverseComposeFunctors (*)(fruit::impl::meta::ComponentFunctor (*)(fruit::impl::meta::ConvertComponent, fruit::impl::meta::Comp<fruit::impl::meta::Vector<>, fruit::impl::meta::Vector<fruit::impl::meta::Type<Greeter> >, fruit::impl::meta::Vector<fruit::impl::meta::Type<Greeter> >, fruit::impl::meta::Vector<fruit::impl::meta::Pair<fruit::impl::meta::Type<Greeter>, fruit::impl::meta::Vector<> > >, fruit::impl::meta::Vector<>, fruit::impl::meta::EmptyList>), fruit::impl::meta::ProcessDeferredBindings), fruit::impl::meta::ConstructComponentImpl (*)())]’
/usr/local/include/fruit/impl/component.defn.h:39:57: required by substitution of ‘template<class ... PreviousBindings> template<class Comp> using ConvertTo = fruit::impl::meta::Eval<fruit::impl::meta::Call(fruit::impl::meta::ReverseComposeFunctors (*)(fruit::impl::meta::ComponentFunctor (*)(fruit::impl::meta::ConvertComponent, Comp), fruit::impl::meta::ProcessDeferredBindings, fruit::impl::meta::Id<fruit::impl::meta::ProcessBinding(PreviousBindings)>...), fruit::impl::meta::ConstructComponentImpl (*)())> [with Comp = fruit::impl::meta::Comp<fruit::impl::meta::Vector<>, fruit::impl::meta::Vector<fruit::impl::meta::Type<Greeter> >, fruit::impl::meta::Vector<fruit::impl::meta::Type<Greeter> >, fruit::impl::meta::Vector<fruit::impl::meta::Pair<fruit::impl::meta::Type<Greeter>, fruit::impl::meta::Vector<> > >, fruit::impl::meta::Vector<>, fruit::impl::meta::EmptyList>; PreviousBindings = {}]’
/usr/local/include/fruit/impl/component.defn.h:55:95: required from ‘fruit::Component<Types>::Component(fruit::PartialComponent<Bindings ...>&&) [with Bindings = {}; Params = {Greeter}]’
/main.cpp:52:35: required from here
/usr/local/include/fruit/impl/meta/eval.h:102:87: error: invalid use of incomplete type ‘struct fruit::impl::meta::IsInjectableBareType::apply<fruit::impl::meta::None>’
MetaFun>::type::template apply<typename DoEval<MetaExprs>::type...>::type>::type;
^
In file included from /usr/local/include/fruit/impl/data_structures/fixed_size_allocator.h:21:0,
from /usr/local/include/fruit/impl/injector/injector_storage.h:21,
from /usr/local/include/fruit/impl/component_functors.defn.h:24,
from /usr/local/include/fruit/component.h:25,
from /usr/local/include/fruit/fruit.h:27,
from main.cpp:12:
/usr/local/include/fruit/impl/meta/component.h:606:10: note: declaration of ‘struct fruit::impl::meta::IsInjectableBareType::apply<fruit::impl::meta::None>’
struct apply;
^~~~~
Please Check
poletti-marco commented
Thanks, that's pretty ugly, I'll look into reporting a more user-friendly
error in this case, suggesting to inject a factory.
…On Thu, 30 Jan 2020, 08:17 Rhythm Chopra, ***@***.***> wrote:
In file included from /usr/local/include/fruit/impl/meta/vector.h:21:0,
from /usr/local/include/fruit/impl/meta/immutable_set.h:22,
from /usr/local/include/fruit/impl/meta/set.h:21,
from /usr/local/include/fruit/impl/injection_errors.h:21,
from /usr/local/include/fruit/fruit.h:25,
from main.cpp:12:
/usr/local/include/fruit/impl/meta/eval.h: In instantiation of ‘struct fruit::impl::meta::DoEval<fruit::impl::meta::IsInjectableBareType(fruit::impl::meta::NormalizeType (*)(fruit::impl::meta::Type<fruit::Assisted<int> >))>’:
/usr/local/include/fruit/impl/meta/eval.h:117:87: required from ‘struct fruit::impl::meta::DoEval<fruit::impl::meta::IsInjectableType (*)(fruit::impl::meta::Type<fruit::Assisted<int> >)>’
/usr/local/include/fruit/impl/meta/logical_operations.h:33:23: required from ‘struct fruit::impl::meta::DoEval<fruit::impl::meta::Not (*)(fruit::impl::meta::IsInjectableType (*)(fruit::impl::meta::Type<fruit::Assisted<int> >))>’
/usr/local/include/fruit/impl/meta/eval.h:202:102: required from ‘struct fruit::impl::meta::DoEval<fruit::impl::meta::If(fruit::impl::meta::Not (*)(fruit::impl::meta::IsInjectableType (*)(fruit::impl::meta::Type<fruit::Assisted<int> >)), fruit::impl::meta::ConstructError (*)(fruit::impl::NonInjectableTypeErrorTag, fruit::impl::meta::Type<fruit::Assisted<int> >), fruit::impl::meta::None)>’
/usr/local/include/fruit/impl/meta/eval.h:117:87: required from ‘struct fruit::impl::meta::DoEval<fruit::impl::meta::CheckInjectableType (*)(fruit::impl::meta::Type<fruit::Assisted<int> >)>’
/usr/local/include/fruit/impl/meta/eval.h:236:106: required from ‘struct fruit::impl::meta::DoEval<fruit::impl::meta::PropagateError(fruit::impl::meta::CheckInjectableType (*)(fruit::impl::meta::Type<fruit::Assisted<int> >), fruit::impl::meta::None)>’
/usr/local/include/fruit/impl/meta/eval.h:102:87: [ skipping 35 instantiation contexts, use -ftemplate-backtrace-limit=0 to disable ]
/usr/local/include/fruit/impl/meta/eval.h:117:87: required from ‘struct fruit::impl::meta::DoEval<fruit::impl::meta::ComponentFunctor::apply<fruit::impl::meta::ConvertComponent, fruit::impl::meta::Comp<fruit::impl::meta::Vector<>, fruit::impl::meta::Vector<fruit::impl::meta::Type<Greeter> >, fruit::impl::meta::Vector<fruit::impl::meta::Type<Greeter> >, fruit::impl::meta::Vector<fruit::impl::meta::Pair<fruit::impl::meta::Type<Greeter>, fruit::impl::meta::Vector<> > >, fruit::impl::meta::Vector<>, fruit::impl::meta::EmptyList> >::type (*)(fruit::impl::meta::GetResult (*)(fruit::impl::meta::ProcessDeferredBindings (*)(fruit::impl::meta::Comp<fruit::impl::meta::Vector<>, fruit::impl::meta::Vector<>, fruit::impl::meta::Vector<>, fruit::impl::meta::Vector<>, fruit::impl::meta::Vector<>, fruit::impl::meta::EmptyList>)))>’
/usr/local/include/fruit/impl/meta/eval.h:249:106: required from ‘struct fruit::impl::meta::DoEval<fruit::impl::meta::PropagateError (*)(fruit::impl::meta::ComponentFunctor::apply<fruit::impl::meta::ConvertComponent, fruit::impl::meta::Comp<fruit::impl::meta::Vector<>, fruit::impl::meta::Vector<fruit::impl::meta::Type<Greeter> >, fruit::impl::meta::Vector<fruit::impl::meta::Type<Greeter> >, fruit::impl::meta::Vector<fruit::impl::meta::Pair<fruit::impl::meta::Type<Greeter>, fruit::impl::meta::Vector<> > >, fruit::impl::meta::Vector<>, fruit::impl::meta::EmptyList> >::type (*)(fruit::impl::meta::GetResult (*)(fruit::impl::meta::ProcessDeferredBindings (*)(fruit::impl::meta::Comp<fruit::impl::meta::Vector<>, fruit::impl::meta::Vector<>, fruit::impl::meta::Vector<>, fruit::impl::meta::Vector<>, fruit::impl::meta::Vector<>, fruit::impl::meta::EmptyList>))), fruit::impl::meta::Compose2ComponentFunctors::apply<fruit::impl::meta::ProcessDeferredBindings, fruit::impl::meta::ComponentFunctor::apply<fruit::impl::meta::ConvertComponent, fruit::impl::meta::Comp<fruit::impl::meta::Vector<>, fruit::impl::meta::Vector<fruit::impl::meta::Type<Greeter> >, fruit::impl::meta::Vector<fruit::impl::meta::Type<Greeter> >, fruit::impl::meta::Vector<fruit::impl::meta::Pair<fruit::impl::meta::Type<Greeter>, fruit::impl::meta::Vector<> > >, fruit::impl::meta::Vector<>, fruit::impl::meta::EmptyList> >::type>::type::apply<fruit::impl::meta::Comp<fruit::impl::meta::Vector<>, fruit::impl::meta::Vector<>, fruit::impl::meta::Vector<>, fruit::impl::meta::Vector<>, fruit::impl::meta::Vector<>, fruit::impl::meta::EmptyList> >::Op)>’
/usr/local/include/fruit/impl/meta/eval.h:220:51: required from ‘struct fruit::impl::meta::EvalPropagateError<fruit::impl::meta::ComponentFunctorIdentity::apply<fruit::impl::meta::Comp<fruit::impl::meta::Vector<>, fruit::impl::meta::Vector<>, fruit::impl::meta::Vector<>, fruit::impl::meta::Vector<>, fruit::impl::meta::Vector<>, fruit::impl::meta::EmptyList> >::type, fruit::impl::meta::PropagateError (*)(fruit::impl::meta::ComponentFunctor::apply<fruit::impl::meta::ConvertComponent, fruit::impl::meta::Comp<fruit::impl::meta::Vector<>, fruit::impl::meta::Vector<fruit::impl::meta::Type<Greeter> >, fruit::impl::meta::Vector<fruit::impl::meta::Type<Greeter> >, fruit::impl::meta::Vector<fruit::impl::meta::Pair<fruit::impl::meta::Type<Greeter>, fruit::impl::meta::Vector<> > >, fruit::impl::meta::Vector<>, fruit::impl::meta::EmptyList> >::type (*)(fruit::impl::meta::GetResult (*)(fruit::impl::meta::ProcessDeferredBindings (*)(fruit::impl::meta::Comp<fruit::impl::meta::Vector<>, fruit::impl::meta::Vector<>, fruit::impl::meta::Vector<>, fruit::impl::meta::Vector<>, fruit::impl::meta::Vector<>, fruit::impl::meta::EmptyList>))), fruit::impl::meta::Compose2ComponentFunctors::apply<fruit::impl::meta::ProcessDeferredBindings, fruit::impl::meta::ComponentFunctor::apply<fruit::impl::meta::ConvertComponent, fruit::impl::meta::Comp<fruit::impl::meta::Vector<>, fruit::impl::meta::Vector<fruit::impl::meta::Type<Greeter> >, fruit::impl::meta::Vector<fruit::impl::meta::Type<Greeter> >, fruit::impl::meta::Vector<fruit::impl::meta::Pair<fruit::impl::meta::Type<Greeter>, fruit::impl::meta::Vector<> > >, fruit::impl::meta::Vector<>, fruit::impl::meta::EmptyList> >::type>::type::apply<fruit::impl::meta::Comp<fruit::impl::meta::Vector<>, fruit::impl::meta::Vector<>, fruit::impl::meta::Vector<>, fruit::impl::meta::Vector<>, fruit::impl::meta::Vector<>, fruit::impl::meta::EmptyList> >::Op)>’
/usr/local/include/fruit/impl/meta/eval.h:236:106: required from ‘struct fruit::impl::meta::DoEval<fruit::impl::meta::PropagateError(fruit::impl::meta::ProcessDeferredBindings (*)(fruit::impl::meta::Comp<fruit::impl::meta::Vector<>, fruit::impl::meta::Vector<>, fruit::impl::meta::Vector<>, fruit::impl::meta::Vector<>, fruit::impl::meta::Vector<>, fruit::impl::meta::EmptyList>), fruit::impl::meta::PropagateError (*)(fruit::impl::meta::ComponentFunctor::apply<fruit::impl::meta::ConvertComponent, fruit::impl::meta::Comp<fruit::impl::meta::Vector<>, fruit::impl::meta::Vector<fruit::impl::meta::Type<Greeter> >, fruit::impl::meta::Vector<fruit::impl::meta::Type<Greeter> >, fruit::impl::meta::Vector<fruit::impl::meta::Pair<fruit::impl::meta::Type<Greeter>, fruit::impl::meta::Vector<> > >, fruit::impl::meta::Vector<>, fruit::impl::meta::EmptyList> >::type (*)(fruit::impl::meta::GetResult (*)(fruit::impl::meta::ProcessDeferredBindings (*)(fruit::impl::meta::Comp<fruit::impl::meta::Vector<>, fruit::impl::meta::Vector<>, fruit::impl::meta::Vector<>, fruit::impl::meta::Vector<>, fruit::impl::meta::Vector<>, fruit::impl::meta::EmptyList>))), fruit::impl::meta::Compose2ComponentFunctors::apply<fruit::impl::meta::ProcessDeferredBindings, fruit::impl::meta::ComponentFunctor::apply<fruit::impl::meta::ConvertComponent, fruit::impl::meta::Comp<fruit::impl::meta::Vector<>, fruit::impl::meta::Vector<fruit::impl::meta::Type<Greeter> >, fruit::impl::meta::Vector<fruit::impl::meta::Type<Greeter> >, fruit::impl::meta::Vector<fruit::impl::meta::Pair<fruit::impl::meta::Type<Greeter>, fruit::impl::meta::Vector<> > >, fruit::impl::meta::Vector<>, fruit::impl::meta::EmptyList> >::type>::type::apply<fruit::impl::meta::Comp<fruit::impl::meta::Vector<>, fruit::impl::meta::Vector<>, fruit::impl::meta::Vector<>, fruit::impl::meta::Vector<>, fruit::impl::meta::Vector<>, fruit::impl::meta::EmptyList> >::Op))>’
/usr/local/include/fruit/impl/meta/eval.h:102:87: required from ‘struct fruit::impl::meta::DoEval<fruit::impl::meta::Call(fruit::impl::meta::ReverseComposeFunctors (*)(fruit::impl::meta::ComponentFunctor (*)(fruit::impl::meta::ConvertComponent, fruit::impl::meta::Comp<fruit::impl::meta::Vector<>, fruit::impl::meta::Vector<fruit::impl::meta::Type<Greeter> >, fruit::impl::meta::Vector<fruit::impl::meta::Type<Greeter> >, fruit::impl::meta::Vector<fruit::impl::meta::Pair<fruit::impl::meta::Type<Greeter>, fruit::impl::meta::Vector<> > >, fruit::impl::meta::Vector<>, fruit::impl::meta::EmptyList>), fruit::impl::meta::ProcessDeferredBindings), fruit::impl::meta::ConstructComponentImpl (*)())>’
/usr/local/include/fruit/impl/meta/eval.h:253:45: required by substitution of ‘template<class MetaExpr> using Eval = typename fruit::impl::meta::DoEval::type [with MetaExpr = fruit::impl::meta::Call(fruit::impl::meta::ReverseComposeFunctors (*)(fruit::impl::meta::ComponentFunctor (*)(fruit::impl::meta::ConvertComponent, fruit::impl::meta::Comp<fruit::impl::meta::Vector<>, fruit::impl::meta::Vector<fruit::impl::meta::Type<Greeter> >, fruit::impl::meta::Vector<fruit::impl::meta::Type<Greeter> >, fruit::impl::meta::Vector<fruit::impl::meta::Pair<fruit::impl::meta::Type<Greeter>, fruit::impl::meta::Vector<> > >, fruit::impl::meta::Vector<>, fruit::impl::meta::EmptyList>), fruit::impl::meta::ProcessDeferredBindings), fruit::impl::meta::ConstructComponentImpl (*)())]’
/usr/local/include/fruit/impl/component.defn.h:39:57: required by substitution of ‘template<class ... PreviousBindings> template<class Comp> using ConvertTo = fruit::impl::meta::Eval<fruit::impl::meta::Call(fruit::impl::meta::ReverseComposeFunctors (*)(fruit::impl::meta::ComponentFunctor (*)(fruit::impl::meta::ConvertComponent, Comp), fruit::impl::meta::ProcessDeferredBindings, fruit::impl::meta::Id<fruit::impl::meta::ProcessBinding(PreviousBindings)>...), fruit::impl::meta::ConstructComponentImpl (*)())> [with Comp = fruit::impl::meta::Comp<fruit::impl::meta::Vector<>, fruit::impl::meta::Vector<fruit::impl::meta::Type<Greeter> >, fruit::impl::meta::Vector<fruit::impl::meta::Type<Greeter> >, fruit::impl::meta::Vector<fruit::impl::meta::Pair<fruit::impl::meta::Type<Greeter>, fruit::impl::meta::Vector<> > >, fruit::impl::meta::Vector<>, fruit::impl::meta::EmptyList>; PreviousBindings = {}]’
/usr/local/include/fruit/impl/component.defn.h:55:95: required from ‘fruit::Component<Types>::Component(fruit::PartialComponent<Bindings ...>&&) [with Bindings = {}; Params = {Greeter}]’
/main.cpp:52:35: required from here
/usr/local/include/fruit/impl/meta/eval.h:102:87: error: invalid use of incomplete type ‘struct fruit::impl::meta::IsInjectableBareType::apply<fruit::impl::meta::None>’
MetaFun>::type::template apply<typename DoEval<MetaExprs>::type...>::type>::type;
^
In file included from /usr/local/include/fruit/impl/data_structures/fixed_size_allocator.h:21:0,
from /usr/local/include/fruit/impl/injector/injector_storage.h:21,
from /usr/local/include/fruit/impl/component_functors.defn.h:24,
from /usr/local/include/fruit/component.h:25,
from /usr/local/include/fruit/fruit.h:27,
from main.cpp:12:
/usr/local/include/fruit/impl/meta/component.h:606:10: note: declaration of ‘struct fruit::impl::meta::IsInjectableBareType::apply<fruit::impl::meta::None>’
struct apply;
^~~~~
—
You are receiving this because you commented.
Reply to this email directly, view it on GitHub
<#96?email_source=notifications&email_token=AALZ4FYOU5GRZSAHK6T3HZTRAL4P7A5CNFSM4KNYU4OKYY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOEKLSOXY#issuecomment-580331359>,
or unsubscribe
<https://github.com/notifications/unsubscribe-auth/AALZ4FY3JBXKFEIXYGUDJXLRAL4P7ANCNFSM4KNYU4OA>
.
Rhythm Chopra commented
But, for injecting objects of a class will injectFactory
work? I mean documentation and examples recommend registerConstructor
for this purpose.
poletti-marco commented
ASSISTED is used when you want to inject a factory.
AFAICT in your example, you should do that, changing the Component in the
return type to have the factory as provided type instead of the final type,
and changing the users of that class to inject a factory first.
If a parameter is not injected (due to ASSISTED) it needs to be specified
when you inject the class, by injecting the factory and then calling it
with the value you want.
…On Thu, 30 Jan 2020, 08:21 Rhythm Chopra, ***@***.***> wrote:
But, for injecting objects of a class will injectFactory work? I mean
documentation and examples recommend registerConstructor for this purpose.
—
You are receiving this because you commented.
Reply to this email directly, view it on GitHub
<#96?email_source=notifications&email_token=AALZ4FYVMG7WC5N4GSTRA3LRAL5ABA5CNFSM4KNYU4OKYY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOEKLS57Q#issuecomment-580333310>,
or unsubscribe
<https://github.com/notifications/unsubscribe-auth/AALZ4F22YSYUJL2OH6OM353RAL5ABANCNFSM4KNYU4OA>
.
Rhythm Chopra commented
Okay, I'll give it a shot
poletti-marco commented
There was no further activity here, assuming that this has been resolved.
If not feel free to reopen.