// Copyright (C) 2005 Davis E. King (davis@dlib.net)
// License: Boost Software License See LICENSE.txt for the full license.
#ifndef DLIB_MEMBER_FUNCTION_POINTER_KERNEl_C_
#define DLIB_MEMBER_FUNCTION_POINTER_KERNEl_C_
#include "member_function_pointer_kernel_abstract.h"
#include "../algs.h"
#include "../assert.h"
namespace dlib
{
template <
typename mfpb,// is an implementation of member_function_pointer_kernel_abstract.h
typename PARAM1 = typename mfpb::param1_type,
typename PARAM2 = typename mfpb::param2_type,
typename PARAM3 = typename mfpb::param3_type,
typename PARAM4 = typename mfpb::param4_type
>
class mfpkc;
// ----------------------------------------------------------------------------------------
template <
typename mfpb
>
class mfpkc<mfpb,void,void,void,void> :
public mfpb
{
public:
template <
typename T
>
void set (
T& object,
void (T::*cb)()
)
{
// make sure requires clause is not broken
DLIB_CASSERT(cb != 0,
"\tvoid member_function_pointer::set"
<< "\n\tthe member function pointer can't be null"
<< "\n\tthis: " << this
);
// call the real function
mfpb::set(object,cb);
}
template <
typename T
>
void set (
const T& object,
void (T::*cb)()const
)
{
// make sure requires clause is not broken
DLIB_CASSERT(cb != 0,
"\tvoid member_function_pointer::set"
<< "\n\tthe member function pointer can't be null"
<< "\n\tthis: " << this
);
// call the real function
mfpb::set(object,cb);
}
void operator () (
) const
{
// make sure requires clause is not broken
DLIB_CASSERT(this->is_set() == true ,
"\tvoid member_function_pointer::operator()"
<< "\n\tYou must call set() before you can use this function"
<< "\n\tthis: " << this
);
// call the real function
mfpb::operator()();
}
};
// ----------------------------------------------------------------------------------------
template <
typename mfpb,
typename PARAM1
>
class mfpkc<mfpb,PARAM1,void,void,void> :
public mfpb
{
public:
template <
typename T
>
void set (
T& object,
void (T::*cb)(PARAM1)
)
{
// make sure requires clause is not broken
DLIB_CASSERT(cb != 0,
"\tvoid member_function_pointer::set"
<< "\n\tthe member function pointer can't be null"
<< "\n\tthis: " << this
);
// call the real function
mfpb::set(object,cb);
}
template <
typename T
>
void set (
const T& object,
void (T::*cb)(PARAM1)const
)
{
// make sure requires clause is not broken
DLIB_CASSERT(cb != 0,
"\tvoid member_function_pointer::set"
<< "\n\tthe member function pointer can't be null"
<< "\n\tthis: " << this
);
// call the real function
mfpb::set(object,cb);
}
void operator () (
PARAM1 param1
) const
{
// make sure requires clause is not broken
DLIB_CASSERT(this->is_set() == true ,
"\tvoid member_function_pointer::operator()"
<< "\n\tYou must call set() before you can use this function"
<< "\n\tthis: " << this
);
// call the real function
mfpb::operator()(param1);
}
};
// ----------------------------------------------------------------------------------------
template <
typename mfpb,
typename PARAM1,
typename PARAM2
>
class mfpkc<mfpb,PARAM1,PARAM2,void,void> :
public mfpb
{
public:
template <
typename T
>
void set (
T& object,
void (T::*cb)(PARAM1,PARAM2)
)
{
// make sure requires clause is not broken
DLIB_CASSERT(cb != 0,
"\tvoid member_function_pointer::set"
<< "\n\tthe member function pointer can't be null"
<< "\n\tthis: " << this
);
// call the real function
mfpb::set(object,cb);
}
template <
typename T
>
void set (
const T& object,
void (T::*cb)(PARAM1,PARAM2)const
)
{
// make sure requires clause is not broken
DLIB_CASSERT(cb != 0,
"\tvoid member_function_pointer::set"
<< "\n\tthe member function pointer can't be null"
<< "\n\tthis: " << this
);
// call the real function
mfpb::set(object,cb);
}
void operator () (
PARAM1 param1,
PARAM2 param2
) const
{
// make sure requires clause is not broken
DLIB_CASSERT(this->is_set() == true ,
"\tvoid member_function_pointer::operator()"
<< "\n\tYou must call set() before you can use this function"
<< "\n\tthis: " << this
);
// call the real function
mfpb::operator()(param1,param2);
}
};
// ----------------------------------------------------------------------------------------
template <
typename mfpb,
typename PARAM1,
typename PARAM2,
typename PARAM3
>
class mfpkc<mfpb,PARAM1,PARAM2,PARAM3,void> :
public mfpb
{
public:
template <
typename T
>
void set (
T& object,
void (T::*cb)(PARAM1,PARAM2,PARAM3)
)
{
// make sure requires clause is not broken
DLIB_CASSERT(cb != 0,
"\tvoid member_function_pointer::set"
<< "\n\tthe member function pointer can't be null"
<< "\n\tthis: " << this
);
// call the real function
mfpb::set(object,cb);
}
template <
typename T
>
void set (
const T& object,
void (T::*cb)(PARAM1,PARAM2,PARAM3)const
)
{
// make sure requires clause is not broken
DLIB_CASSERT(cb != 0,
"\tvoid member_function_pointer::set"
<< "\n\tthe member function pointer can't be null"
<< "\n\tthis: " << this
);
// call the real function
mfpb::set(object,cb);
}
void operator () (
PARAM1 param1,
PARAM2 param2,
PARAM3 param3
) const
{
// make sure requires clause is not broken
DLIB_CASSERT(this->is_set() == true ,
"\tvoid member_function_pointer::operator()"
<< "\n\tYou must call set() before you can use this function"
<< "\n\tthis: " << this
);
// call the real function
mfpb::operator()(param1,param2,param3);
}
};
// ----------------------------------------------------------------------------------------
template <
typename mfpb,
typename PARAM1,
typename PARAM2,
typename PARAM3,
typename PARAM4
>
class mfpkc :
public mfpb
{
public:
template <
typename T
>
void set (
T& object,
void (T::*cb)(PARAM1,PARAM2,PARAM3,PARAM4)
)
{
// make sure requires clause is not broken
DLIB_CASSERT(cb != 0,
"\tvoid member_function_pointer::set"
<< "\n\tthe member function pointer can't be null"
<< "\n\tthis: " << this
);
// call the real function
mfpb::set(object,cb);
}
template <
typename T
>
void set (
const T& object,
void (T::*cb)(PARAM1,PARAM2,PARAM3,PARAM4)const
)
{
// make sure requires clause is not broken
DLIB_CASSERT(cb != 0,
"\tvoid member_function_pointer::set"
<< "\n\tthe member function pointer can't be null"
<< "\n\tthis: " << this
);
// call the real function
mfpb::set(object,cb);
}
void operator () (
PARAM1 param1,
PARAM2 param2,
PARAM3 param3,
PARAM4 param4
) const
{
// make sure requires clause is not broken
DLIB_CASSERT(this->is_set() == true ,
"\tvoid member_function_pointer::operator()"
<< "\n\tYou must call set() before you can use this function"
<< "\n\tthis: " << this
);
// call the real function
mfpb::operator()(param1,param2,param3,param4);
}
};
// ----------------------------------------------------------------------------------------
}
#endif // DLIB_MEMBER_FUNCTION_POINTER_KERNEl_C_