我在我的代码中使用了JUCE库和一些Boost头文件.Juce将"T"定义为宏(呻吟),Boost经常在其模板定义中使用"T".结果是,如果你以某种方式在Boost头之前包含JUCE头,那么预处理器会扩展Boost代码中的JUCE宏,然后编译器就会无可救药地丢失.
在大多数情况下保持我的包含顺序并不难,但是当你有一个包含一些其他类的JUCE类时,它会变得棘手,在链上的某个地方,一个文件包含Boost,如果有任何文件在它之前需要JUCE包括你遇到麻烦.
我最初的希望是解决这个问题
#undef T
Run Code Online (Sandbox Code Playgroud)
之前任何包括Boost.但问题是,如果我不重新定义它,那么其他代码会混淆"T"未被声明.
然后我想也许我可以这样做一些循环的#define技巧:
// some includes up here
#define ___T___ T
#undef T
// include boost headers here
#define T ___T___
#undef ___T___
Run Code Online (Sandbox Code Playgroud)
丑陋,但我认为它可能有用.
可悲的是没有.我在使用"T"作为宏的地方出错
'___T___' was not declared in this scope.
Run Code Online (Sandbox Code Playgroud)
有没有办法让这两个库可靠地一起工作?
我试图确定我的代码是在iPhone还是iPhone3G上运行.我的第一次尝试是在UIKit中使用UIDevice类,但iPhone和iPhone3G都返回相同的响应:
NSLog([[UIDevice currentDevice] name]); // Name of the phone as named by user
NSLog([[UIDevice currentDevice] uniqueIdentifier]); // A GUID like string
NSLog([[UIDevice currentDevice] systemName]); // "iPhone OS"
NSLog([[UIDevice currentDevice] systemVersion]); // "2.2.1"
NSLog([[UIDevice currentDevice] model]); // "iPhone" on both devices
NSLog([[UIDevice currentDevice] localizedModel]); // "iPhone" on both devices
Run Code Online (Sandbox Code Playgroud)
这些是UIDevice允许您查询的唯一参数.
我在Foundation Framework中看了一下,但还没有找到合适的电话.
我敢肯定有一些我可以查询的硬件(例如位置服务中的东西),但这似乎是一个黑客.有谁知道确定这个的简单方法?
我正在开发一个iPhone应用程序,并且非常想确定设备是否正在漫游,以便我可以智能地避免在用户家庭网络之外花费昂贵的连接.
我写的应用程序是用于越狱手机,但如果可能的话,我更愿意使用标准的SDK.
这是我已经找到的:
1. Apple SDK: 在Apple文档中,我在Apple的SCNetworkReachability API中找到了承诺.通过API,您可以访问WIFI或手机网络,当前是否建立了网络连接等.但是,搜索SCNetworkReachability API参考pdf以获取"漫游"或"漫游"两者均为nil.他们的示例代码也是如此.
2.越狱iPhone FS的Grep: 首选项 - >常规 - >网络选项卡是用户可以打开或关闭漫游的地方.查看plist文件("/Applications/Preferences/Network.plist"),我能够找到以下引用:
PostNotification = "com.apple.commcenter.InternationalRoamingEDGE.changed";
cell = PSSwitchCell;
default = 1;
defaults = "com.apple.commcenter";
key = InternationalRoamingEDGE;
label = "EDGE_ROAMING_TOGGLE";
requiredCapabilities = (
telephony
);
Run Code Online (Sandbox Code Playgroud)
这当然是一个领先者,因为看起来我可以注册用户更改了InternationalRoaming设置的通知.尽管如此,我不确定如何将其变成他们实际上正在漫游的知识.
3.检查SpringBoard的类转储源: 我使用class-dump转储了SpringBoard的类.我无法找到任何"漫游"或"漫游"的引用
4.显然我开始在SO检查这个: 找不到任何相关的东西.
进一步的步骤:有人在这里有任何建议吗?我知道这是可能的.但苹果显然很难找到它.我非常怀疑,如果不使用私有框架,这是可能的.(例如CoreTelephony).由于这是一个越狱的应用程序,我可能会使用SpringBoard中的注入代码来屏幕抓取运营商名称,但我真的更愿意不去那条路线.任何建议都非常感谢.谢谢.
我正在为POSIX(OSX)编写一个程序,我将有许多进程向一个监听器发送消息,该监听器本质上是一个日志记录线程.所有进程都在单独的程序中运行,并且使用许多进程写入的单个命名管道(FIFO),但只有一个进程读取是非常诱人的.
1)这会有效吗? - 我可以使用bash来设置一个包含多个进程写入的fifo,所以我从理论上知道这是有效的.但在实践中,是否存在我正在掩饰的问题?
shell#1
$ mkfifo /tmp/fifo
$ cat /tmp/fifo
Run Code Online (Sandbox Code Playgroud)
贝壳#2和#3
$ cat > /tmp/fifo
"Type stuff here, after hitting enter, it is read by shell #1"
Run Code Online (Sandbox Code Playgroud)
2)如果每个编写器只写相对较短的消息(<100字节?),那么我可以假设每次调用write()都将被发送给读者吗?或者一条消息的一半会有来自另一位作者的另一半消息的乱码风险?
谢谢你的建议.