// Copyright (C) 2007 Davis E. King (davis@dlib.net) // License: Boost Software License See LICENSE.txt for the full license. #ifndef DLIB_IS_KINd_H_ #define DLIB_IS_KINd_H_ #include namespace dlib { /*! This file contains a set of templates that enable you to determine if a given type implements an abstract interface defined in one of the dlib *_abstract.h files. !*/ // ---------------------------------------------------------------------------------------- struct default_is_kind_value { static const bool value = false; }; // ---------------------------------------------------------------------------------------- template struct is_graph : public default_is_kind_value { /*! - if (T is an implementation of graph/graph_kernel_abstract.h) then - is_graph::value == true - else - is_graph::value == false !*/ }; // ---------------------------------------------------------------------------------------- template struct is_directed_graph : public default_is_kind_value { /*! - if (T is an implementation of directed_graph/directed_graph_kernel_abstract.h) then - is_directed_graph::value == true - else - is_directed_graph::value == false !*/ }; // ---------------------------------------------------------------------------------------- template struct is_matrix : public default_is_kind_value { /*! - if (T is some kind of matrix expression from the matrix/matrix_exp_abstract.h component) then - is_matrix::value == true - else - is_matrix::value == false !*/ // Don't set the helper to anything. Just let it be void. ASSERT_ARE_SAME_TYPE(helper,void); }; // ---------------------------------------------------------------------------------------- template struct is_array2d : public default_is_kind_value { /*! - if (T is an implementation of array2d/array2d_kernel_abstract.h) then - is_array2d::value == true - else - is_array2d::value == false !*/ }; // ---------------------------------------------------------------------------------------- template struct is_array : public default_is_kind_value { /*! - if (T is an implementation of array/array_kernel_abstract.h) then - is_array::value == true - else - is_array::value == false !*/ }; // ---------------------------------------------------------------------------------------- template struct is_std_vector : public default_is_kind_value { /*! - if (T is an implementation of the standard C++ std::vector object) then - is_std_vector::value == true - else - is_std_vector::value == false !*/ }; // ---------------------------------------------------------------------------------------- template struct is_pair : public default_is_kind_value { /*! - if (T is a std::pair object) then - is_std_vector::value == true - else - is_std_vector::value == false !*/ }; // ---------------------------------------------------------------------------------------- template struct is_rand : public default_is_kind_value { /*! - if (T is an implementation of rand/rand_kernel_abstract.h) then - is_rand::value == true - else - is_rand::value == false !*/ }; // ---------------------------------------------------------------------------------------- template struct is_config_reader : public default_is_kind_value { /*! - if (T is an implementation of config_reader/config_reader_kernel_abstract.h) then - is_config_reader::value == true - else - is_config_reader::value == false !*/ }; // ---------------------------------------------------------------------------------------- // ---------------------------------------------------------------------------------------- // Implementation details // ---------------------------------------------------------------------------------------- // ---------------------------------------------------------------------------------------- template struct is_std_vector > { const static bool value = true; }; template struct is_std_vector { const static bool value = is_std_vector::value; }; template struct is_std_vector{ const static bool value = is_std_vector::value; }; template struct is_std_vector { const static bool value = is_std_vector::value; }; // ---------------------------------------------------------------------------------------- template struct is_pair > { const static bool value = true; }; // ---------------------------------------------------------------------------------------- } #endif // DLIB_IS_KINd_H_