соглашение о вызове функций с boost::function_types

Недавно я экспериментировал с библиотекой boost::function_types и наткнулся на небольшую загвоздку. Я хочу узнать соглашение о вызове данной функции, однако я не совсем уверен, как это сделать. Вот что у меня есть до сих пор:

Это приводит к ошибке о том, что он не может найти значения тега *_cc внутри каждого оператора if. Я подозреваю, что это может иметь какое-то отношение к тому, как я определяю макросы; в документации не очень понятно, как настроить дополнительные соглашения о вызовах с вашим компилятором... Любая помощь здесь будет оценена по достоинству.

Спасибо,

EDITED: все заработало, похоже, мне нужно было включить config/config.hpp, как показано ниже:

#define BOOST_FT_COMMON_X86_CCs 1
#include <boost/function_types/config/config.hpp>
#include <boost/type_traits.hpp>
#include <boost/function_types/property_tags.hpp>
#include <boost/function_types/is_function.hpp>
#include <boost/function_types/is_function_pointer.hpp>
#include <boost/function_types/parameter_types.hpp>
#include <boost/function_types/result_type.hpp>
#include <boost/function_types/function_arity.hpp>

template<class F>
inline void parse_cc(F f, func_info_s& out) {
    out.cc = cc_err;
    if (boost::function_types::is_function<F, stdcall_cc>::value == true) {
        out.cc = cc_stdcall;
    } else if (boost::function_types::is_function<F, fastcall_cc>::value == true) {
        out.cc = cc_fastcall;
    } else if (boost::function_types::is_function<F, cdecl_cc>::value == true) {
        out.cc = cc_cdecl;
    }
}

person Exponent    schedule 04.09.2009    source источник
comment
Не могли бы вы добавить свое редактирование в качестве ответа, чтобы вопрос получил правильный принятый ответ? Спасибо!   -  person Kim Gräsman    schedule 05.09.2009
comment
Я отредактировал свой пост, чтобы отразить правильный, функциональный (без каламбура) код   -  person Exponent    schedule 06.09.2009
comment
Вы должны опубликовать свое решение в качестве ответа, а затем принять его.   -  person GManNickG    schedule 06.09.2009


Ответы (1)


Кажется, я просто пропустил один из файлов заголовков (config/config.hpp)

#define BOOST_FT_COMMON_X86_CCs 1
#include <boost/function_types/config/config.hpp>
#include <boost/type_traits.hpp>
#include <boost/function_types/property_tags.hpp>
#include <boost/function_types/is_function.hpp>
#include <boost/function_types/is_function_pointer.hpp>
#include <boost/function_types/parameter_types.hpp>
#include <boost/function_types/result_type.hpp>
#include <boost/function_types/function_arity.hpp>

template<class F>
inline void parse_cc(F f, func_info_s& out) {
    out.cc = cc_err;
    if (boost::function_types::is_function<F, stdcall_cc>::value == true) {
        out.cc = cc_stdcall;
    } else if (boost::function_types::is_function<F, fastcall_cc>::value == true) {
        out.cc = cc_fastcall;
    } else if (boost::function_types::is_function<F, cdecl_cc>::value == true) {
        out.cc = cc_cdecl;
    }
}
person Exponent    schedule 06.09.2009