Ваш код не устанавливает обработчики сигналов и s_signal_handler
не используется. Вам необходимо вызвать функцию signal
, чтобы зарегистрировать свой обратный вызов.
#include <atomic>
#include <signal.h>
::std::atomic<bool> s_interrupted{};
static void signal_handler(int signal)
{
s_interrupted = true;
}
int main()
{
::signal(SIGINT, &::signal_handler);
Это вероятно Ваш оптимальный маршрут.
Я не боялся бы использования класса Активатора здесь. Это - довольно стандартный класс, который зависится от компиляторами. Например, этот код VB
Public Sub Example(Of T as New)()
Dim x = new T()
End Sub
Переводит примерно в этот код
Public Sub Example(Of T As New)()
Dim x = Activator.CreateInstance(OF T)
ENd Sub
Почему Вы хотите избежать Активатора? В основном это - способ сделать его.
Я имею в виду, Вы могли записать общий метод и затем назвать это через отражение, но это - довольно отвратительное "долгое сокращение" только для предотвращения Активатора.