Skip to content

Commit bb1db65

Browse files
Support const char* as a function argument in function.h
1 parent 27eadb4 commit bb1db65

File tree

1 file changed

+22
-2
lines changed

1 file changed

+22
-2
lines changed

Diff for: function.h

+22-2
Original file line numberDiff line numberDiff line change
@@ -572,14 +572,24 @@ namespace classdesc
572572

573573
/// extract an argument from buffer \a b, and run functional f on it
574574
template <class F, class A, class R, class B>
575-
typename enable_if<ArgAcceptable<A>, R>::T
575+
typename enable_if<And<ArgAcceptable<A>,Not<is_same<A,const char*>>>, R>::T
576576
eval(F f, B& b)
577577
{
578578
A a{};
579579
b>>a;
580580
return f(a);
581581
}
582582

583+
template <class F, class A, class R, class B>
584+
typename enable_if<And<ArgAcceptable<A>,is_same<A,const char*>>, R>::T
585+
eval(F f, B& b)
586+
{
587+
std::string a{};
588+
b>>a;
589+
const char* tmp=a.c_str();
590+
return f(tmp);
591+
}
592+
583593
template <class F, class A, class R, class B>
584594
typename enable_if<Not<ArgAcceptable<A>>, R>::T
585595
eval(F f, B& b)
@@ -588,14 +598,24 @@ namespace classdesc
588598
}
589599

590600
template <class F, class A, class B>
591-
typename enable_if<ArgAcceptable<A>, void>::T
601+
typename enable_if<And<ArgAcceptable<A>,Not<is_same<A,const char*>>>, void>::T
592602
evalVoid(F f, B& b)
593603
{
594604
A a{};
595605
b>>a;
596606
f(a);
597607
}
598608

609+
template <class F, class A, class B>
610+
typename enable_if<And<ArgAcceptable<A>,is_same<A,const char*>>, void>::T
611+
evalVoid(F f, B& b)
612+
{
613+
std::string a{};
614+
b>>a;
615+
const char* tmp=a.c_str();
616+
f(tmp);
617+
}
618+
599619
template <class F, class A, class B>
600620
typename enable_if<Not<ArgAcceptable<A>>, void>::T
601621
evalVoid(F f, B& b)

0 commit comments

Comments
 (0)