У меня есть класс, который содержит только статические элементы.Вызов указателей функций C++ из библиотек C
Я хотел бы зарегистрировать одну из своих функций-членов (VerifyClean в коде ниже) для вызова при выходе с использованием функции библиотеки «atexit».
C++ FQA говорит, что я должен указать extern «C» для функции, которую я хочу зарегистрировать таким образом, как в следующем примере.
class Example
{
public:
static void Initialize();
static void DoDirtyStuff {++dirtLevel;}
static void CleanUpStuff {--dirtLevel;}
private:
static void VerifyClean();
// DOESN'T COMPILE: extern "C" static void VerifyClean();
static int dirtLevel;
}
int Example::dirtLevel;
extern "C" void Example::VerifyClean() // DO I NEED extern "C" HERE?
{
assert(dirtLevel == 0);
}
void Example::Initialize()
{
dirtLevel = 0;
atexit(&VerifyClean);
}
Нужно ли мне действительно использовать экстерьер «С»?
Будет ли изменяться ответ, если я заменил «atexit» на не библиотечную функцию (реализованную на простом C)?
Если функция VerifyClean была общедоступной, и я решил назвать ее непосредственно из кода на C++, могли бы я получить ошибки ссылки или сбои во время выполнения? Я спрашиваю об этом, потому что в декларации не упоминается extern «C» вообще, поэтому обычный C++-код может неправильно обрабатывать вызов функции. Это работает нормально в моей системе MS Visual Studio 2005.
Почему класс с только статическими функциями ? И FQA вряд ли является хорошим местом для изучения C++. –
«FQA считается вредным» – jkerian
C++ FQA - гораздо более надежный ресурс для обучения C++, чем FAQ. –