KASKADE 7 development version
Macros
member_variable_macro.hh File Reference
#include <boost/type_traits/is_same.hpp>
#include <boost/preprocessor/cat.hpp>

Go to the source code of this file.

Macros

#define KASKADE_CREATE_MEMBER_VARIABLE_CHECK(VARIABLE_TYPE, VARIABLE_NAME, NAME)
 
#define KASKADE_CREATE_MEMBER_NAME_CHECK(VARIABLE_NAME, NAME)
 

Macro Definition Documentation

◆ KASKADE_CREATE_MEMBER_NAME_CHECK

#define KASKADE_CREATE_MEMBER_NAME_CHECK (   VARIABLE_NAME,
  NAME 
)
Value:
template<typename T> \
struct NAME { \
struct Fallback { \
bool VARIABLE_NAME; \
}; \
\
struct Derived : T, Fallback { }; \
template<typename C, C> \
struct ChT; \
\
template<typename C> \
static std::false_type f(ChT< bool Fallback::*, &C::VARIABLE_NAME >*); \
template<typename C> \
static std::true_type f(...); \
\
typedef decltype(f<Derived>(0)) type; \
static bool const value = type::value; \
};

Definition at line 63 of file member_variable_macro.hh.

◆ KASKADE_CREATE_MEMBER_VARIABLE_CHECK

#define KASKADE_CREATE_MEMBER_VARIABLE_CHECK (   VARIABLE_TYPE,
  VARIABLE_NAME,
  NAME 
)
Value:
template<class T, bool variableExists> \
struct BOOST_PP_CAT(Kaskade_,BOOST_PP_CAT(NAME,_VariableTypeCheck{)) \
static bool const value = false; \
};\
\
template<class T> \
struct BOOST_PP_CAT(Kaskade_,BOOST_PP_CAT(NAME,_VariableTypeCheck))<T,true>{ \
static bool const value = boost::is_same<VARIABLE_TYPE,decltype(T::VARIABLE_NAME)>::value; \
};\
\
template<typename T> \
struct NAME { \
struct Fallback { \
VARIABLE_TYPE VARIABLE_NAME; \
}; \
\
struct Derived : T, Fallback { }; \
template<typename C, C> \
struct ChT; \
\
template<typename C> \
static std::false_type f(ChT< VARIABLE_TYPE Fallback::*, &C::VARIABLE_NAME >*); \
template<typename C> \
static std::true_type f(...); \
\
typedef decltype(f<Derived>(0)) type; \
static bool const value = BOOST_PP_CAT(Kaskade_,BOOST_PP_CAT(NAME,_VariableTypeCheck))<T,type::value>::value; \
};

Definition at line 29 of file member_variable_macro.hh.