小编bob*_*obo的帖子

使用 C++ `function` 块(相对于 Objective C 块)时是否需要使用弱指针

如果您在 Objective-C 样式块中捕获对 ARC 下的强引用self,则需要使用__weak指针来避免 ARC“保留周期”问题。

// Right way:
- (void)configureBlock {
  XYZBlockKeeper * __weak weakSelf = self;
  self.block = ^{
    [weakSelf doSomething];   // capture the weak reference
                              // to avoid the reference cycle
  }
}
Run Code Online (Sandbox Code Playgroud)

我真的不知道保留周期是什么,但这个答案对此进行了一些描述。我只知道你应该__weak对 Objective-C 风格的块使用指针。请参阅捕获 self 时避免强引用循环

self但我的问题是,在 C++ 块下捕获时是否需要创建弱指针<functional>

- (void)configureBlock {
  self.block = [self](){
    [self doSomething]; // is this ok? It's not an objective C block.
  }
}
Run Code Online (Sandbox Code Playgroud)

block objective-c++ automatic-ref-counting

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

一切都很不稳定

我正在创建这个多线程C++程序,并且在发布模式下编译时,我发现了这种类型的错误(对象仍为空),即它看起来像缺少volatile标记.

但问题是,由于第二个工作线程涉及各种对象,这意味着程序中几乎所有东西都是易变的.

我不知道是否有一种方法来关闭优化在苹果LLVM编译器,创造了该漏洞volatile的关键字是专门设计来解决.这些错误不会出现在调试模式下(因为优化已关闭).放在volatile任何地方基本上意味着volatile每个成员函数之后加入每个类,并volatile在每个共享变量声明之前添加.

我想我宁愿失去volatile优化而不是冒险出现虚假的错误因为我忘了标记某些东西volatile.

c++ compiler-construction optimization volatile llvm

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

使用`<textarea>`来防止脚本

嗯.而不是"defanging"输入或使用某种正则表达式删除标签,将用户的东西转储到一个<textarea>

例如,假设有一个PHP页面执行以下操作:

echo '<textarea>';
echo $_GET['whuh_you_say'] ;
echo '</textarea>';
Run Code Online (Sandbox Code Playgroud)

通常这很容易受到xss攻击,但是textarea,所有脚本标签只会显示为,<script>并且不会被执行.

这不安全吗?

php security xss textarea

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

分配int x ='abc';

我正在进行代码审查,我看到将单引号字符串赋值给枚举值:

enum
{
  Option_1 = 'a',
  Option_2 = 'b'
} ;

虽然这使得代码稍微可读(尽管枚举的含义应该与num的名字相当),但对我来说这看起来很愚蠢.

我不知道你可以这样做,在研究之后,我可以看到发生的一切都是你正在使用的"字符"的二进制值被抛入int.

在实践中有没有其他人这样做?或者这是一个不好的做法?

c++

2
推荐指数
4
解决办法
983
查看次数

使用notepad ++语法着色的python中的##

在我的编辑器(notepad ++)中用Python脚本编辑模式,一行

## is this a special comment or what?

变为与正常#comment不同的颜色(黄色).

##评论与#comment有什么特别之处?

python comments

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

哪个更适合阵列去除?

我正在从数组中删除一个项目(如果存在).

我可以想到两种方法来做到这一点

方式#1

# x array, r item to remove
if r in x :
  x.remove( r )

方式#2

try :
  x.remove( r )
except :
  pass

时间显示尝试/除外的方式可以更快

(有时我会得到:)

1.16225508968e-06
8.80804972547e-07

1.14314196588e-06
8.73752536492e-07
import timeit

runs = 10000
x = [ '101', '102', '103', '104', '105', 'a', 'b', 'c',
  'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', '111', '112', '113',
  'x', 'y', 'z', 'w', 'wwwwwww', 'aeiojwaef', 'iweojfoigj', 'oiowow',
  'oiweoiwioeiowe', 'oiwjaoigjoaigjaowig',
]
r = 'a'

code1 ="""
x …

python

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

appengine select基于时间戳

我似乎无法根据时间戳选择一些东西.行为有点奇怪,<和=符号似乎并不意味着我期望它们.

""" A site message """
class Message( db.Model ) :
  # from/to/ a few other fields
  subject = db.StringProperty()
  body = db.Text()

  # this is the field i'm trying to use
  sent = db.DateTimeProperty( auto_now_add=True )

当我写GQL查询时

select * from Message where sent = '2009-09-14 01:00:02.648000'

(在数据存储区中有一条准确显示该时间戳的消息)

没有给我任何回报.

如果我试试

select * from Message where sent < '2009-09-14 01:00:02.648000'

它只是给了我所有这些.当我尝试>符号时,它只是再次给我一个.

这里发生了什么,我如何根据时间戳选择?

python google-app-engine

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

django模板调用函数

使用谷歌appengine和django.

每当我在模型中有一个db.ReferenceProperty()时:

class User( db.Model ) :
    name = db.StringProperty()
    avatar = db.ReferenceProperty( dbImage )
Run Code Online (Sandbox Code Playgroud)

因此,在推出用户页面时,在django模板中我无法做到

<div>
    <span>{{ user.name }}</span>
    <span>{{ user.avatar.key() }}</span>
</div>
Run Code Online (Sandbox Code Playgroud)

我现在正在做的是在数据输出到看起来像的模板之前编写一些python代码

user.avatarsKey = user.avatar.key()
Run Code Online (Sandbox Code Playgroud)

然后

<div>
    <span>{{ user.name }}</span>
    <span>{{ user.avatarsKey }}</span>
</div>
Run Code Online (Sandbox Code Playgroud)

消除函数调用.我不喜欢这样,因为我必须在很多地方这样做,并且它开始变得杂乱无章.有没有办法从模板内部调用db对象的.key()方法?

django google-app-engine templates

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

git diff显示删除为新的更改

每次我做一个git diff,尽管自第一个提交以来很多提交,它继续给我这些旧的更改,这些更改很久以前用于文件删除.

我在提交中删除了大约7个提交之前的整个文件夹,并且仍然在分支或合并上,git就像删除是新的一样.做git diff静止显示已删除文件的每一行都"刚被删除",好像这是新的,但我删除了很多提交前.

这是怎么回事?

git commit

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

template <typename T>在整个代码中进行整理

之前对一个类进行了模板化,并且由于这种模板化,所有接收这种新模板类型对象的类都需要模板化,即使模板化完全无关紧要.

所以:

  • class Shape为基类class Sphere,Cube,Model
  • 每个Shape包含一个Mesh
  • Mesh 现在已经被模板化以允许VertexBuffer基本上具有参数化类型:

所以:

template <typename T> struct Mesh
{
    VertexBuffer<T> verts ; // Mesh needs to be templated to allow
    // the vertex buffer to be templated as well
} ;
Run Code Online (Sandbox Code Playgroud)

所以现在包含Mesh(基类Shape)的类也需要模板化:

template <typename T> class Shape
{
    Mesh<T>* mesh ;
} ;
Run Code Online (Sandbox Code Playgroud)

而现在,所有代码的任何位置的方法需要被模板以及,即使在没有办法的模板化影响的代码(即代码有没有业务往来的顶点类型网格构件的)

例如,八叉树节点:

// An octree node
template <typename T> …
Run Code Online (Sandbox Code Playgroud)

c++ templates

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