Как получить соглашение о вызове функций с помощью BOOST? - PullRequest
0 голосов
/ 03 декабря 2011

Используя BOOST, я пытаюсь получить соглашение о вызове функции, и для этого я использую тот же подход, что и тот, кто написал тот же вопрос - однако их решение не решило мою проблему.

Вот ссылка на их проблему: Соглашение о вызове функции с boost :: function_types

Я попытался получить соглашение о вызовах, используя подобный подход, но получаю ошибки компилятора, жалующиеся на то, что "cdecl_cc" не определен. Вот небольшой фрагмент моего кода:

#define BOOST_FT_COMMON_X86_CCs 1
#include <boost/function_types/config/config.hpp>
#include <boost/function_types/is_function.hpp>

    static bool isCdecl()
    {
        if(boost::function_types::is_function<T, cdecl_cc>::value == true)
            return true;

                return false;
    }

Другой пользователь утверждает, что, добавив include для boost / function_types / config / config.hpp и определив BOOST_FT_COMMON_X86_CCs, проблема была решена - однако она не решила мою.

Я также попытался поместить включения и определение в предварительно скомпилированный заголовок.

Глядя на config.hpp, я вижу включение в cc_names.hpp, в котором приведено следующее определение:

#define BOOST_FT_BUILTIN_CC_NAMES \
  (( IMPLICIT           , implicit_cc , BOOST_PP_EMPTY                ))\
  (( CDECL              , cdecl_cc    , BOOST_PP_IDENTITY(__cdecl   ) ))\
  (( STDCALL            , stdcall_cc  , BOOST_PP_IDENTITY(__stdcall ) ))\
  (( PASCAL             , pascal_cc   , BOOST_PP_IDENTITY(pascal    ) ))\
  (( FASTCALL           , fastcall_cc , BOOST_PP_IDENTITY(__fastcall) ))\
  (( CLRCALL            , clrcall_cc  , BOOST_PP_IDENTITY(__clrcall ) ))\
  (( THISCALL           , thiscall_cc , BOOST_PP_IDENTITY(__thiscall) ))\
  (( IMPLICIT_THISCALL  , thiscall_cc , BOOST_PP_EMPTY                )) 

Я не уверен, как следует толковать такое определение, если бы кто-то мог мне его объяснить, я мог бы выяснить, как решить мою проблему.

Извините за все мои вопросы, связанные с BOOST, я довольно новичок в этом, и сначала я погружаюсь в одну из самых сложных библиотек.

Спасибо.

1 Ответ

1 голос
/ 04 декабря 2011

Полагаю, вам необходимо набрать cdecl_cc с boost::function_types namespace, а также #include <boost/function_types/property_tags.hpp>.

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

...