#include <boost/fusion/adapted/struct/define_struct.hpp>
#include <boost/mpl/contains.hpp>
BOOST_FUSION_DEFINE_STRUCT(
(your_namespace), foo,
(int, a)
(char, c))
template<typename source_type, typename search_type>
struct has_type
{
typedef typename boost::mpl::contains<source_type, search_type>::type value_type;
static const bool value = value_type::value;
};
#include <iostream>
int main()
{
bool foo_has_int_pointer = has_type<your_namespace::foo, int*>::value;
bool foo_has_int = has_type<your_namespace::foo, int>::value;
std::cout << "foo_has_int_pointer: " << foo_has_int_pointer << "\n";
std::cout << "foo_has_int: " << foo_has_int << "\n";
your_namespace::foo my_foo;
my_foo.a = 10;
my_foo.c = 'x';
std::cout << "my_foo: " << my_foo.a << ", " << my_foo.c;
}
I2luY2x1ZGUgPGJvb3N0L2Z1c2lvbi9hZGFwdGVkL3N0cnVjdC9kZWZpbmVfc3RydWN0LmhwcD4KI2luY2x1ZGUgPGJvb3N0L21wbC9jb250YWlucy5ocHA+CgpCT09TVF9GVVNJT05fREVGSU5FX1NUUlVDVCgKCSh5b3VyX25hbWVzcGFjZSksIGZvbywgCgkoaW50LCBhKSAKCShjaGFyLCBjKSkKCnRlbXBsYXRlPHR5cGVuYW1lIHNvdXJjZV90eXBlLCB0eXBlbmFtZSBzZWFyY2hfdHlwZT4Kc3RydWN0IGhhc190eXBlCnsKCXR5cGVkZWYgdHlwZW5hbWUgYm9vc3Q6Om1wbDo6Y29udGFpbnM8c291cmNlX3R5cGUsIHNlYXJjaF90eXBlPjo6dHlwZSB2YWx1ZV90eXBlOwoJc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSB2YWx1ZV90eXBlOjp2YWx1ZTsKfTsKCiNpbmNsdWRlIDxpb3N0cmVhbT4KCmludCBtYWluKCkKewoJYm9vbCBmb29faGFzX2ludF9wb2ludGVyID0gaGFzX3R5cGU8eW91cl9uYW1lc3BhY2U6OmZvbywgaW50Kj46OnZhbHVlOwoJYm9vbCBmb29faGFzX2ludCA9IGhhc190eXBlPHlvdXJfbmFtZXNwYWNlOjpmb28sIGludD46OnZhbHVlOwoKCXN0ZDo6Y291dCA8PCAiZm9vX2hhc19pbnRfcG9pbnRlcjogIiA8PCBmb29faGFzX2ludF9wb2ludGVyIDw8ICJcbiI7CglzdGQ6OmNvdXQgPDwgImZvb19oYXNfaW50OiAiIDw8IGZvb19oYXNfaW50IDw8ICJcbiI7CgoJeW91cl9uYW1lc3BhY2U6OmZvbyBteV9mb287CgoJbXlfZm9vLmEgPSAxMDsKCW15X2Zvby5jID0gJ3gnOwoKCXN0ZDo6Y291dCA8PCAibXlfZm9vOiAiIDw8IG15X2Zvby5hIDw8ICIsICIgPDwgbXlfZm9vLmM7Cn0=