Как объявить член как указатель на extern «C» функционировать?

Я ищу, чтобы объявить тип внешнего указателя функции «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Но компилятор все отклонил. Какие-либо предложения?

7

Решение

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. Я не уверен, является ли это ошибкой в ​​любом из компиляторов, поэтому будьте осторожны при использовании этого.

1

Другие решения

Вы не можете объявить typedef как этот (от 7.5p4):

Спецификация связи должна встречаться только в области пространства имен (3.3).

0

По вопросам рекламы [email protected]