Mirror reflection library - Lagoon run-time layer 0.5.13
|
This example shows the usage of the namespace reflection functions and range for-each utility with lambda functions and the only_if range adapter
Copyright 2008-2010 Matus Chochlik. Distributed under the Boost Software License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
#include <mirror/mirror.hpp> #include <lagoon/lagoon.hpp> #include <lagoon/range/for_each.hpp> #include <lagoon/range/only_if.hpp> #include <iostream> int main(void) { using namespace lagoon; // // get the members of the global scope and filter only those // satisfying the first lambda function predicate (i.e. those // whose base name contains "long") and for each in the resulting // range call the second lambda function printing the kind // of the meta-object and its base name without the nested // name specifier for_each( only_if( reflected_global_scope()->members(), [](const shared<meta_named_scoped_object>& member)->bool { const std::string srch("long"); return member->base_name().find(srch) != std::string::npos; } ), [](const shared<meta_named_scoped_object>& member) { std::cout << member->self()->construct_name() << " " << member->base_name() << std::endl; } ); return 0; } /* Example of output: type long int type unsigned long int type long double */