我正在写一个涉及大量模板技巧和boost :: any的库.我遇到了一个我基本上有这个的情况:
boost::any a1, a2, a3, a4;
Run Code Online (Sandbox Code Playgroud)
...我需要调用一个如下所示的函数:
template <typename A1, typename A2, typename A3, typename A4>
void somefunc (A1 a1, A2 a2, A3 a3, A4 a4);
Run Code Online (Sandbox Code Playgroud)
我可以使用一个淫秽嵌套的if语句系列,但假设我正在处理10种不同的类型,那就是10,000 if语句!Boost预处理器可以在这里提供帮助,但这仍然是一个可怕的解决方案.
有没有更好的方法用boost :: any的内容调用模板化函数而不诉诸这种疯狂?据我所知,没有.
我正在开发一个使用GCD运行大量后台作业的MacOS X应用程序.后台作业使用CLucene索引文档,并在子上下文中访问Core Data.
这些作业都是在短时间内生成的(在使用DISPATCH_QUEUE_CONCURRENT创建的队列上使用dispatch_async),但只有4个一次完成实际工作.这是使用dispatch_semaphore_t完成的,通过在作业开始时等待它并在作业完成时释放它来完成.
我在以下情况下看到一个非常奇怪,可靠的可重现的死锁:
NSWindow显然陷入僵局,试图在显示菜单栏时发送通知.这是发生这种情况时主线程的堆栈跟踪:
#0 0x00007fff870ae6c2 in semaphore_wait_trap ()
#1 0x00007fff8b1bf486 in _dispatch_semaphore_wait_slow ()
#2 0x00007fff8b69c12b in -[_NSDNXPCConnection sendMessage:waitForAck:] ()
#3 0x00007fff8b57ced5 in _CFXNotificationPost ()
#4 0x00007fff8b58bbf3 in CFNotificationCenterPostNotification ()
#5 0x00007fff902ae174 in HIS_XPC_CFNotificationCenterPostNotification ()
#6 0x00007fff8bd3612a in BroadcastToolboxMessage ()
#7 0x00007fff8bd6d063 in MenuBarInstance::Show(MenuBarAnimationStyle, unsigned char, unsigned char, unsigned char) ()
#8 0x00007fff8bd98144 in SetMenuBarObscured ()
#9 0x00007fff8bd97e0f in HIApplication::HandleActivated(OpaqueEventRef*, unsigned char, OpaqueWindowPtr*) ()
#10 0x00007fff8bd95407 in HIApplication::EventObserver(unsigned int, OpaqueEventRef*, void*) ()
#11 0x00007fff8bd636e0 in _NotifyEventLoopObservers …Run Code Online (Sandbox Code Playgroud) macos cocoa multithreading objective-c grand-central-dispatch