00001 00008 /***************************************************************************** 00009 ** Ifdefs 00010 *****************************************************************************/ 00011 00012 #ifndef ECL_CONCEPTS_BLUEPRINTS_HPP_ 00013 #define ECL_CONCEPTS_BLUEPRINTS_HPP_ 00014 00015 /***************************************************************************** 00016 ** Includes 00017 *****************************************************************************/ 00018 00019 #include "macros.hpp" 00020 00021 /***************************************************************************** 00022 ** Namespaces 00023 *****************************************************************************/ 00024 00025 namespace ecl { 00026 00027 /***************************************************************************** 00028 ** Concept [BluePrint] 00029 *****************************************************************************/ 00030 00034 template <typename Implementation> 00035 class BluePrintConcept { 00036 public: 00045 ecl_compile_time_concept_test(BluePrintConcept) 00046 { 00047 target = blue_print.instantiate(); 00048 blue_print.apply(target); 00049 } 00050 00051 private: 00052 typename Implementation::base_type target; 00053 Implementation blue_print; 00054 }; 00055 00056 }; // namespace ecl 00057 00058 #endif /* ECL_CONCEPTS_BLUEPRINTS_HPP_ */