|
Boost : |
Subject: Re: [boost] [intro] Preview: Introspection library
From: Stefan Strasser (strasser_at_[hidden])
Date: 2010-06-29 18:21:52
Zitat von David Sankel <camior_at_[hidden]>:
> On Mon, Jun 28, 2010 at 8:00 AM, Stefan Strasser
> <strasser_at_[hidden]> wrote:
>>
>> I'd be interested in comments on an introspection library I've been
>> developing.
>
> You may find paper "Scrap++: Scrap Your Boilerplate in C++"[1] to be
> interesting for ideas. One thing that confuses me about your library
thanks. (direct link:
http://sms.cs.chalmers.se/publications/papers/2006-WGP.pdf )
do I understand the paper correctly that you can't traverse two
instances of a type at the same time?
that's a central part to my approach. the (const) traversal of a
single instance could have been accomplished with the Serializable
concept, but algorithms like copying or comparing objects could only
be implemented very inefficiently by serialization.
> is I don't know whether the reflections are semantic or syntactic. I
> do think a clear separation of syntax and semantics is important to
> writing clear code. Perhaps you can show what a shared_ptr
> "implementation of the concept" looks like?
it depends on the shared_ptr implementation if you'd actually
implement introspect() for shared_ptr, but I guess you mean supporting
shared_ptr in a specific algorithm.
apply_recursive, which seems to be comparable to scrap++:
template<class F,class Data,class T,class Semantics>
void apply_recursive(F const &f,Data &data,shared_ptr<T> &ptr,Semantics){
if(ptr)
intro::apply_member_recursive(f,data,*ptr,typename
Semantics::indir_semantics());
}
this function is found via ADL.
apply_member_recursive calls f(*ptr), but only after polymorphic
dispatch if needed, and after it has been checked that *ptr hasn't
already been traversed, e.g. through another pointer.
>
> Fusion's adapters, which are purely syntactic, are perfect for what
> I've needed so far. Syntactically speaking, are you adding anything
> besides data inheritance?
I'm not familiar with that distinction wrt reflection.
Stefan
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk