Разрешения на язык:
extern "C" {
#include "foo.h"
}
, Что, если foo.h содержит что-то, что требует связи C++?
void f_plain(const char *);
extern "C++" void f_fancy(const std::string &);
Это - то, как Вы угождаете компоновщику.
Я полагаю, согласно бритве Оккама , нет необходимости в существовании этого gen_server
, тем более что там абсолютно в нем не хранится состояние . Такой процесс может потребоваться в ситуациях, когда вам нужно, чтобы доступ к таблице (или любому другому ресурсу) был строго последовательным (например, вы могли бы избежать любых прерванных транзакций ценой узкое место).
Инкапсуляция доступа к таблице в модуле является хорошим решением . Он не создает дополнительной сложности , обеспечивая при этом надлежащий уровень абстракции и инкапсуляции.
s razor нет необходимости в существовании этого gen_server
, тем более что в нем нет абсолютно состояния . Такой процесс может потребоваться в ситуациях, когда вам нужно, чтобы доступ к таблице (или любому другому ресурсу) был строго последовательным (например, вы могли бы избежать любых прерванных транзакций ценой узкое место).
Инкапсуляция доступа к таблице в модуле - хорошее решение . Он не создает дополнительной сложности , обеспечивая при этом надлежащий уровень абстракции и инкапсуляции.
s razor нет необходимости в существовании этого gen_server
, тем более что в нем нет абсолютно состояния . Такой процесс может потребоваться в ситуациях, когда вам нужно, чтобы доступ к таблице (или любому другому ресурсу) был строго последовательным (например, вы могли избежать любых прерванных транзакций ценой узкое место).
Инкапсуляция доступа к таблице в модуле - хорошее решение . Он не создает дополнительной сложности , обеспечивая при этом надлежащий уровень абстракции и инкапсуляции.
Такой процесс может потребоваться в ситуациях, когда вам нужно, чтобы доступ к таблице (или любому другому ресурсу) был строго последовательным (например, вы могли бы избежать любых прерванных транзакций ценой узкое место).Инкапсуляция доступа к таблице в модуле - хорошее решение . Он не создает дополнительной сложности , обеспечивая при этом надлежащий уровень абстракции и инкапсуляции.
Такой процесс может потребоваться в ситуациях, когда вам нужно, чтобы доступ к таблице (или любому другому ресурсу) был строго последовательным (например, вы могли бы избежать любых прерванных транзакций ценой узкое место).Инкапсуляция доступа к таблице в модуле является хорошим решением . Он не создает дополнительной сложности , обеспечивая при этом надлежащий уровень абстракции и инкапсуляции.
Я не уверен, что понимаю, почему вы решили инкапсулировать таблицу с процессом. Mnesia предназначена для обеспечения множественного одновременного доступа к таблицам, как локально, так и распределенных по кластеру.
Создание модуля API, который выполняет все конкретные операции доступа к таблицам и обновления, является хорошей идеей, поскольку функции API будут лучше передавать ваши намерения в код, который их вызывает. Это будет более читабельно, чем вводить операции мнезии непосредственно в вызывающий код.
Модуль API также дает вам возможность позже переключиться с mnesia на другую систему хранения, если вам нужно. Использование транзакций mnesia внутри вашего модуля API защищает вас от некоторых ошибок программирования, поскольку mnesia откатывает операции, которые завершаются сбоем.