Я ищу, чтобы объявить тип внешнего указателя функции «C». Это переменная-член. Синтаксис в этот вопрос Я не могу скомпилировать.
template<typename Sig> struct extern_c_fp {
extern "C" typedef typename std::add_pointer<Sig>::type func_ptr_type;
};
Я экспериментировал с размещением extern "C"
на обоих концах и между typedef
а также typename
и между type
а также func_ptr_type
Но компилятор все отклонил. Какие-либо предложения?
extern "C" {
template<typename R, typename... Args>
using extern_c_fp = R(*)(Args...);
}
using my_function_ptr = extern_c_fp<void, int, double>;
// returns void, takes int and double
Это не использует тот же интерфейс, который вы используете, но может быть способ извлечь тип возвращаемого значения и типы аргумента Sig
,
Это работает в Clang 3.1. Xeo указал это не работает в GCC. Я не уверен, является ли это ошибкой в любом из компиляторов, поэтому будьте осторожны при использовании этого.
Вы не можете объявить typedef как этот (от 7.5p4):
Спецификация связи должна встречаться только в области пространства имен (3.3).