我想将宏扩展的结果字符串化.
我试过以下内容:
#define QUOTE(str) #str
#define TEST thisisatest
#define TESTE QUOTE(TEST)
Run Code Online (Sandbox Code Playgroud)
并且TESTE扩展到:"TEST",而我正试图获得"thisisatest".我知道这是预处理器的正确行为,但任何人都可以帮我找到另一种方法吗?
Using TESTE #TEST is not valid
Using TESTE QUOTE(thisisatest) is not what I'm trying to do
Run Code Online (Sandbox Code Playgroud) 我有一个iPad应用程序,用于创建和显示视频MPMoviePlayerViewController
.这是我的代码:
MPMoviePlayerViewController *mpvc = [[MPMoviePlayerViewController alloc] initWithContentURL:[NSURL URLWithString:URLEncode(uri)]];
[mpvc setModalTransitionStyle:UIModalTransitionStyleCrossDissolve];
[mpvc setWantsFullScreenLayout:YES];
[<MainViewController> presentModalViewController:mpvc animated:YES];
Run Code Online (Sandbox Code Playgroud)
电影加载/播放工作正常,但是,当电影控制器出现时,它会在顶部显示状态栏(连接,电池,小时),即使我在主窗口上取消激活它也是如此.
我试过做:
[mpvc setWantsFullScreenLayout:YES];
[[UIApplication sharedApplication] setStatusBarHidden:YES];
Run Code Online (Sandbox Code Playgroud)
似乎没有任何工作,但是如果我也放了:
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleBlackTranslucent];
Run Code Online (Sandbox Code Playgroud)
状态栏消失了!但电影控制器仍然会调整大小,好像状态栏在那里(即使我已经使用过-setWantsFullScreenLayout:
).
有人能指出一种简单(经过验证)的方式来显示没有状态栏的视频吗?
谢谢.
嵌入脚本时:
<script src="..." async defer></script>
Run Code Online (Sandbox Code Playgroud)
有没有办法知道他们什么时候装完?
通常在window.load
调用事件时,人们会希望所有脚本都准备就绪.但我不知道当你用async
或加载它们时是否仍然存在defer
.我在线阅读了一些文档,但在这个问题上找不到任何结论.
试试以下代码:
#include <functional>
#include <memory>
class C {
public:
void F(std::function<void(std::shared_ptr<void>)>){}
void F(std::function<void(std::shared_ptr<int>)>){}
};
int main(){
C c;
c.F([](std::shared_ptr<void>) {});
}
Run Code Online (Sandbox Code Playgroud)
您将看到编译错误:
prog.cc:12:7: error: call to member function 'F' is ambiguous
c.F([](std::shared_ptr<void>) {});
~~^
prog.cc:6:10: note: candidate function
void F(std::function<void(std::shared_ptr<void>)>){}
^
prog.cc:7:10: note: candidate function
void F(std::function<void(std::shared_ptr<int>)>){}
^
Run Code Online (Sandbox Code Playgroud)
有没有办法解决这种模棱两可的问题?也许与SFINAE?
我想剪辑的区域UIView
,成为UIImage
以备后用.
我从一些片段中找出了这段代码:
CGRect _frameIWant = CGRectMake(100, 100, 100, 100);
UIGraphicsBeginImageContext(view.frame.size);
[view.layer renderInContext:UIGraphicsGetCurrentContext()];
//STEP A: GET AN IMAGE FOR THE FULL FRAME
UIImage *_fullFrame = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
//STEP B: CLIP THE IMAGE
CGImageRef _regionImage = CGImageCreateWithImageInRect([_fullFrame CGImage], _frameIWant);
UIImage *_finalImage = [UIImage imageWithCGImage:_regionImage];
CGImageRelease(_regionImage);
Run Code Online (Sandbox Code Playgroud)
'view'是UIView
我剪裁的,_finalImage
是UIImage
我想要的.
代码工作没有问题,但有点慢.我相信通过在步骤A中直接获取部分屏幕可以获得一些性能.
我正在寻找类似的东西renderInContext: withRect:
或者UIGraphicsGetImageFromCurrentImageContextWithRect()
呵呵.
还没有找到任何东西:(如果你知道一些替代方案,请帮助我.
我已经制作了一个程序,它使用了两个共享库(我编译过)并且放置如下:
/home_directory_where_I_compile_and_run_everything
-->/lib/libjson_linux-gcc-4.4.6_libmt.so
-->/lib/libre2.so.0
Run Code Online (Sandbox Code Playgroud)
当我编译我的程序时,我将这些库的相对位置传递给链接器,如下所示:
g++ ...... stuff ........ my_program.cc lib/libjson_linux-gcc-4.4.6_libmt.so lib/libre2.so.0
Run Code Online (Sandbox Code Playgroud)
并且它编译得很好,但是在运行程序时它无法找到libre2.so,如果我用ldd检查它,这是发生了什么:
....
lib/libjson_linux-gcc-4.4.6_libmt.so (0x00007f62906bc000)
libre2.so.0 => not found
....
Run Code Online (Sandbox Code Playgroud)
显然,它确实承认libjson上的路径是相对的,但它在libre2.so.0上没有这样做(它修剪了所有路径,只留下了libre2.so.0)
有人能告诉我为什么会这样吗?
另外,有没有办法通过g ++参数修改它?
最好.
*更新*哇看看这个!我已经将libre2.so.0的名称更改为stuff.so,然后尝试编译基本相同,如下所示:
g++ ...... stuff ........ my_program.cc lib/libjson_linux-gcc-4.4.6_libmt.so lib/stuff.so
Run Code Online (Sandbox Code Playgroud)
它无论如何都会失败; 不仅它失败了,它失败了,因为它找不到"libre2.so.0".
Whyyy?
*更新#2*
输出为 readelf -d the_program.o
0x0000000000000001 (NEEDED) Shared library: [lib/libjson_linux-gcc-4.4.6_libmt.so]
0x0000000000000001 (NEEDED) Shared library: [libre2.so.0]
Run Code Online (Sandbox Code Playgroud)
现在,如果我可以将[libre2.so.0]改为[lib/libre2.so.0],那就没关系了.
*更新#3*
正如@troubadour发现:
当可执行文件与具有DT_SONAME字段的共享对象链接时,则在运行可执行文件时,动态链接器将尝试加载由DT_SONAME字段指定的共享对象,而不是使用为链接器指定的文件名.
这就是为什么它适用于libjson .....所以而不是libre2.so.0.(libjson .....所以没有SONAME的条目).
我终于找到了我正在寻找的确切问题:
有没有办法告诉gcc链接器忽略共享库文件上的SONAME条目,而是链接到特定的文件路径?
苏家伙,
我正在尝试做一个自我调用的函数,但是将所有内容放在一个块上,
如您所见,以下函数旨在被无限次调用(直到arcrandom返回低于50的数字),并且您应该期望作为输出可变数量的"RUNNING"消息,具体取决于偶然性.
void (^_test_closure)(void) = ^ {
NSLog(@"RUNNING");
if(arc4random() % 100 > 50) {
_test_closure();
}
};
_test_closure();
Run Code Online (Sandbox Code Playgroud)
但是,在运行它时,我得到一个EXC_BAD_ACCESS错误,我发现的原因是,当代码试图在闭包内部调用_test_closure时,它基本上指向无处.
有谁知道如何使上述代码工作?
我试图在我的UIView底部添加一点红线.
我希望这条线是1px线.
有人可以告诉我为什么以下代码:
- (void)drawRect:(CGRect)rect {
CGContextRef currentContext = UIGraphicsGetCurrentContext();
CGContextSaveGState(currentContext);
CGContextSetRGBFillColor(currentContext, 0.0f, 0.0f, 0.0f, 1.0f);
CGContextFillRect(currentContext, RECT(0, 0, rect.size.width, rect.size.height - 8));
CGContextSetLineWidth(currentContext, 1);
CGContextSetRGBStrokeColor(currentContext, 1.0f, 0.0f, 0.0f, 1.0f);
CGContextBeginPath(currentContext);
CGContextMoveToPoint(currentContext, 0, rect.size.height - 7);
CGContextAddLineToPoint(currentContext, rect.size.width, rect.size.height - 7);
CGContextStrokePath(currentContext);
CGContextRestoreGState(currentContext);
}
Run Code Online (Sandbox Code Playgroud)
绘制一条横跨2px高度的线?
这是一个棘手的问题,我只是无法打击.
我知道Obj-C块本身并不是闭包,它们的实现与Javascript闭包有些不同但我仍然会使用Javascript示例来展示我想要完成的事情(熟悉Javascript的人会得到它) .
在Javascript上你可以创建一个像下面那样的"函数工厂":
//EXAMPLE A
var _arr = [], i = 0;
for(;i<8;++i) {
_arr[i] = function() {
console.log('Result:' + i);
};
}
//BY THE END OF THIS LOOP i == 7
_arr[0]();
_arr[1]();
_arr[2]();
...
_arr[7]();
Run Code Online (Sandbox Code Playgroud)
其中使用相应的函数填充名为_arr的数组,然后计算所有这些数组.请注意,上面代码的结果将输出...
Result: 7
Result: 7
Result: 7
...
Result: 7
Run Code Online (Sandbox Code Playgroud)
...'7'在所有函数中都是正确的,因为在函数得到评估的时候,i的值等于8,即使i的值在创建它们时为0 ... 7,这里我们得出结论,我是通过引用而不是通过值传递的.
如果我们想要"修复"这个并且让每个函数在创建时使用i的值,我们会写这样的东西:
//EXAMPLE B
var _arr = [], i = 0;
for(;i<8;++i) {
_arr[i] = (function(new_i){
return function() {
console.log(new_i);
};
})(i); //<--- HERE WE EVALUATE THE FUNCTION EACH TIME …
Run Code Online (Sandbox Code Playgroud) 这会有点棘手,但我会尽力解释,
考虑以下代码:
class A { a() { return true; } }
class B { b() { return new A(); } }
var b = new B();
console.log(b instanceof B); // true
console.log(b.b() instanceof A); // true <--- [1]
Run Code Online (Sandbox Code Playgroud)
很容易看到它将(class B).b()
返回一个 type(/class) 对象的实例A
。我们可以使用instanceof
运算符来评估它[1]
。
现在,无论出于何种原因,当我们A
在当前范围内没有类的定义时,就会出现问题。可能发生这种情况的一种情况是,当您从库中导入/需要一个对象并且它的许多内部类没有公开时。
由于没有对 的定义A
,因此无法执行<symbol> instanceof A
...
那么,在这种情况下,如何实际执行此检查?
PS:我已经尝试过 Object.prototype.toString... 技巧无济于事。
ios ×5
block ×2
c++ ×2
closures ×2
iphone ×2
javascript ×2
objective-c ×2
uiview ×2
c++11 ×1
drawrect ×1
ecmascript-5 ×1
ecmascript-6 ×1
g++ ×1
html ×1
html5 ×1
ipad ×1
linker ×1
movie ×1
overloading ×1
shared ×1
shared-ptr ×1
statusbar ×1
std ×1
uiimage ×1
uikit ×1