小编alm*_*now的帖子

C预处理器,对宏的结果进行字符串化

我想将宏扩展的结果字符串化.

我试过以下内容:

#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)

stringification c-preprocessor

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

MPMoviePlayerViewController隐藏状态栏

我有一个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:).

有人能指出一种简单(经过验证)的方式来显示没有状态栏的视频吗?

谢谢.

statusbar movie ipad ios

14
推荐指数
1
解决办法
5458
查看次数

脚本上的"加载"事件具有异步和/或延迟

嵌入脚本时:

<script src="..." async defer></script>
Run Code Online (Sandbox Code Playgroud)

有没有办法知道他们什么时候装完?

通常在window.load调用事件时,人们会希望所有脚本都准备就绪.但我不知道当你用async或加载它们时是否仍然存在defer.我在线阅读了一些文档,但在这个问题上找不到任何结论.

html javascript html5

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

如何使用std :: shared_ptr <void>和另一种类型的std :: shared_ptr进行函数重载?

试试以下代码:

#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?

c++ overloading std shared-ptr c++11

13
推荐指数
1
解决办法
303
查看次数

来自UIView地区的UIImage

我想剪辑的区域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我剪裁的,_finalImageUIImage我想要的.

代码工作没有问题,但有点慢.我相信通过在步骤A中直接获取部分屏幕可以获得一些性能.

我正在寻找类似的东西renderInContext: withRect:或者UIGraphicsGetImageFromCurrentImageContextWithRect()呵呵.

还没有找到任何东西:(如果你知道一些替代方案,请帮助我.

iphone uiview uiimage ios

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

运行时C++链接器缺少库(SONAME行为)

我已经制作了一个程序,它使用了两个共享库(我编译过)并且放置如下:

/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条目,而是链接到特定的文件路径?

c++ linker shared g++

7
推荐指数
1
解决办法
5796
查看次数

Objective-C块,递归失败

苏家伙,

我正在尝试做一个自我调用的函数,但是将所有内容放在一个块上,

如您所见,以下函数旨在被无限次调用(直到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时,它基本上指向无处.

有谁知道如何使上述代码工作?

closures block objective-c ios objective-c-blocks

7
推荐指数
2
解决办法
4096
查看次数

UIView drawRect画线宽度错误

我试图在我的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高度的线?

iphone uikit uiview drawrect ios

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

Objective-C Blocks,如何保留上下文值?

这是一个棘手的问题,我只是无法打击.

我知道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)

closures block objective-c ios objective-c-blocks

5
推荐指数
1
解决办法
1842
查看次数

如何将 instanceof 与当前上下文中未定义的类一起使用?

这会有点棘手,但我会尽力解释,

考虑以下代码:

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... 技巧无济于事。

javascript ecmascript-5 ecmascript-6

5
推荐指数
1
解决办法
176
查看次数