summaryrefslogtreecommitdiffstats
path: root/ml/dlib/dlib/any/any_function_impl2.h
blob: e1801ddc1272a493cdeed38ff262f7f08708f5b8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
// Copyright (C) 2011  Davis E. King (davis@dlib.net)
// License: Boost Software License   See LICENSE.txt for the full license.
#ifndef DLIB_ANY_FUNCTION_ARG_LIST
#error "You aren't supposed to directly #include this file.  #include <dlib/any.h> instead."  
#endif

#ifdef DLIB_ANY_FUNCTION_ARG_LIST 

// The case where function_type has a non-void return type
    template <typename function_type, typename Enabled>
    class any_function<function_type, Enabled, DLIB_ANY_FUNCTION_NUM_ARGS>
    {
#define DLIB_ANY_FUNCTION_RETURN return
#include "any_function_impl.h"
#undef DLIB_ANY_FUNCTION_RETURN

    private:
        // You get a compiler error about this function being private if you try to assign
        // or copy between any_functions with different types.  You must only copy between
        // any_functions that represent functions with the same signature.
        template <typename T, typename U> any_function(const any_function<T,U>&);
    };

// The case where function_type has a void return type
    template <typename function_type>
    class any_function<function_type, typename sig_traits<function_type>::type, DLIB_ANY_FUNCTION_NUM_ARGS>
    {
#define DLIB_ANY_FUNCTION_RETURN 
#include "any_function_impl.h"
#undef DLIB_ANY_FUNCTION_RETURN

    private:
        // You get a compiler error about this function being private if you try to assign
        // or copy between any_functions with different types.  You must only copy between
        // any_functions that represent functions with the same signature.
        template <typename T> any_function(const any_function<T>&);
    };

#undef DLIB_ANY_FUNCTION_ARG_LIST
#undef DLIB_ANY_FUNCTION_ARGS
#undef DLIB_ANY_FUNCTION_NUM_ARGS

#endif // DLIB_ANY_FUNCTION_ARG_LIST