小编Aft*_*hew的帖子

我可以重新定义C++宏然后再定义它吗?

我在我的代码中使用了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)

有没有办法让这两个库可靠地一起工作?

c++ macros boost c-preprocessor

40
推荐指数
3
解决办法
1万
查看次数

如何判断您的代码是在iPhone还是iPhone3G上运行?

我试图确定我的代码是在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 ios

22
推荐指数
2
解决办法
5134
查看次数

有没有办法确定iPhone是否正在漫游?

我正在开发一个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中的注入代码来屏幕抓取运营商名称,但我真的更愿意不去那条路线.任何建议都非常感谢.谢谢.

iphone jailbreak roaming-profile core-telephony

21
推荐指数
1
解决办法
2万
查看次数

在posix中有多个进程写入命名管道上的单个阅读器会有影响吗?

我正在为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()都将被发送给读者吗?或者一条消息的一半会有来自另一位作者的另一半消息的乱码风险?

谢谢你的建议.

posix ipc named-pipes fifo

8
推荐指数
1
解决办法
1514
查看次数