我寫了這個程序,有一個主要功能,在其內部,我創建了兩個插槽,這樣的:使用Auto和Lambda來處理信號?
int sockfd1 = socket(AF_INET, SOCK_STREAM, 0);
int sockfd2 = socket(AF_INET, SOCK_STREAM, 0);
現在我做一些東西與他們,當用戶按下CTRL + C終止這個過程中,我想確保插座正常關閉,所以我這樣做:
auto sigTermHandler = [&] (int param) { close(sockfd1); close(sockfd2); };
signal(SIGTERM, sigTermHandler);
但是,這將引發當作爲g++ -std=gnu++0x <filename>.cpp
編譯以下編譯錯誤:
error: cannot convert ‘main(int, char**)::<lambda(int)>’ to ‘__sighandler_t {aka void (*)(int)}’ for argument ‘2’ to ‘void (* signal(int, __sighandler_t))(int)’
用這種方法來處理信號不可能使用lambda嗎?請指教。
P.S.我知道我可以把它放在析構函數中,如果我做了適當的OOP,但我很好奇,看看它是否有效。