MPL Question on crossing the compile \ runtime barrier with bind | adding to boost profiler abstracted file access

I have been reading (ahem and re-reading) "C++ Template Metaprogramming" I have a problem I am trying to solve and was up late last night looking for the answer to jump out at me. If nothing else this helps me as I tend to re-read the same chapters over and over. Here is what I am trying to do In working on coded I am adding to the proposed Boost Profiler (started by Chris Diggings, inherited by yours truly). I am using RAII all "over" my program in the extensions I am adding to the profiler. This puts me in a spot where I have MACROs which stuff the profile points in the program. Now the problem is I would like to be able to add a template param to the TYPE of the profile points which gives it the initialization code for the STREAM it is using. The problem is since the objects themselves get created ALL OVER the program, I don't have a single point of construction (because I am using RAII to track the life cycles inside the functions themselves). I.e. I want to be able to use Boost.IOstreams or ofstream or whatever for these objects.I just need to , at the TYPE DEFINITION be able to define how to initialize this passed stream. I need to be able to do something like this Template <typename STREAMTYPE, typename INITFUNCTOR> Class MyClass { Public: STREAMTYPE outstream; MyClass() { INITFUNCTOR f(outstream); // open the file, init iostreams , or whatever } }; I can always pass in a functor, but what I really want for Christmas is to be able to Tyepdef MyClass<std::ofstream, bind(&std::ofstream::open,_1,"MyFile.txt") > MyNewClass; This doesn't work because bind returns an actual OBJECT instead of a type. (intuitively - it would be cool if I could say bind(...)::Type which would give me the TYPE of the generated functor) SO that led me to be up until 3 am reading about mpl::lambda. I am still trying to determine if THAT can be used in place, but the dots are not connecting for me yet. Any suggestions or directions pointed GREATLY appreciated. Is there a way to make this work with MPL::Lambda? Thanks Brian

"Brian Braatz" <brianb@rmtg.com> writes:
I can always pass in a functor, but what I really want for Christmas is to be able to
Tyepdef MyClass<std::ofstream, bind(&std::ofstream::open,_1,"MyFile.txt") > MyNewClass;
This doesn't work because bind returns an actual OBJECT instead of a type. (intuitively - it would be cool if I could say bind(...)::Type which would give me the TYPE of the generated functor)
SO that led me to be up until 3 am reading about mpl::lambda. I am still trying to determine if THAT can be used in place, but the dots are not connecting for me yet.
Any suggestions or directions pointed GREATLY appreciated.
You want "typeof," a mythical operator not yet in the C++ language -- but many implementations support some form of it as an extension. There's a prototype typeof library in the Sandbox files area now, by Arkadiy Vertleyb and others. Check it out. I suggest you browse the recent thread on typeof in boost-devel as well. -- Dave Abrahams Boost Consulting www.boost-consulting.com
participants (2)
-
Brian Braatz
-
David Abrahams