我已经制作了这两个实用功能:
+ (void)dispatch:(void (^)())f afterDelay:(float)delay {
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(delay*NSEC_PER_SEC)),
dispatch_get_main_queue(),
f);
}
+ (void)dispatch:(void (^)())f withInterval:(float)delay {
void (^_f)() = nil; // <-- A
_f = ^{
f();
[self dispatch:_f afterDelay:delay]; // <-- B
};
[self dispatch:_f afterDelay:delay];
}
Run Code Online (Sandbox Code Playgroud)
这个想法是你可以打电话:
[self dispatch:block afterDelay:delay ]; - 在特定时间后执行块
和
[self dispatch:block withInterval:delay ]; - 定期执行块
好了,如果我调用dispatch:withInterval : ,因为它会在运行时创建一个错误,因为当程序试图在B处执行行时,_f的值将为nil ; 而这又是因为_f保持对所述的值的基准_f在甲.
如果我将A更改为:
__block void (^_f)() = …Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个类来抽象libuv的网络功能的一些基本行为.
#define TCP_BACKLOG 256
class _tcp {
uv_tcp_t* tcp = NULL;
public:
~_tcp() { delete tcp; }
void listen_uv_listen_uv_connection_cb(uv_stream_t* stream, int status) {
printf("NEW CONNECTION\n");
}
void listen(const char* host, int port) {
tcp = new uv_tcp_t();
uv_tcp_init(uv_default_loop(), tcp);
sockaddr_in* addr = new sockaddr_in();
uv_ip4_addr(host, port, addr);
uv_tcp_bind(tcp, (const sockaddr*)addr, 0);
delete addr;
uv_listen((uv_stream_t*)tcp, TCP_BACKLOG, listen_uv_listen_uv_connection_cb);
}
};
Run Code Online (Sandbox Code Playgroud)
以前显示的代码的问题是,当我尝试编译它时,我收到以下错误:
error: reference to non-static member function must be called
on: uv_listen((uv_stream_t*)tcp, TCP_BACKLOG, listen_uv_listen_uv_connection_cb);
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Run Code Online (Sandbox Code Playgroud)
它指出listen_uv_listen_uv_connection_cb了罪魁祸首.
有人可以向我解释,为什么这是一个错误,我该如何解决?
在uv_listen()和 …
我正在寻找一种从给定种子生成随机数的算法,但有一个特殊要求,即无论底层计算机体系结构或语言实现如何,它都将始终生成相同的数字序列。
我已经知道 Mersenne Twister,但是,当使用不同的实现(即 C MT 与 Javascript MT)时,它生成的数字会有所不同。
是否存在具有此属性的算法?另外,我不需要最先进的 RNG,我什至不需要它是加密安全的,我只想在一个地方驱动一个“随机”模拟并让它遵循相同的行为不同的实现。
一个简单的问题。
当您创建 IndexedDB 并指定特定的 时keyPath,您是否仍然需要使用相同的键创建和索引?
我认为它keyPath本身就是一个索引,但我不知道也没有找到任何有关它的信息。
编辑:好的,澄清一下,我的意思是,您是否在具有 keyPath 的索引上获得了性能优势?
当我做这样的事情时:
var x = 5;
console.log( x + (x += 10) ); //(B) LOGS 10, X == 20
console.log( (x += 10) + x ); //(A) LOGS 0, X == 30
Run Code Online (Sandbox Code Playgroud)
(A)和(B)之间的返回值的差异由其x评估时的值来解释.我认为后台应该发生这样的事情:
TIME ---->
(A) (x = 5) + (x += 10 = 15) = 20
(B) (x += 10 == 15) + (x == 15) = 30
Run Code Online (Sandbox Code Playgroud)
但是这只有在且仅当它以与写入x的相同的从左到右的顺序进行评估时才成立.
所以,我有几个问题,
对于所有Javascript实现,这保证是否正确?
是否按标准定义了这种方式?
或者,这是Javascript世界中某种未定义的行为吗?
最后,同样的想法可以应用于函数调用,
var x = 5;
console.log(x += …Run Code Online (Sandbox Code Playgroud) 我正在尝试做某种宏"重载",以便MACRO(某些东西)的扩展方式与MACRO(其他东西)不同.
使用我从这里得到的片段(我不确定它是否100%便携)和Boost PP库中的一些功能,我能够使它工作:D
//THESE TWO COUNT THE NUMBER OF ARGUMENTS
#define VA_NARGS_IMPL(_1, _2, _3, _4, _5, N, ...) N
#define VA_NARGS(...) VA_NARGS_IMPL(__VA_ARGS__, 5, 4, 3, 2, 1)
//THIS ONE RETURNS THE PARAMETER AT POSITION _i FROM A LIST OF __VA_ARGS__
#define VA_ARG(_i, ...) BOOST_PP_ARRAY_ELEM(_i, (VA_NARGS(__VA_ARGS__), (__VA_ARGS__)))
//AND THIS ONE IS THE 'OVERLOADED' MACRO ;)
#define TEST(...) BOOST_PP_IF(BOOST_PP_EQUAL(1, VA_NARGS(__VA_ARGS__)), function_A(VA_ARG(0, __VA_ARGS__)), \ //1 parameter
BOOST_PP_IF(BOOST_PP_EQUAL(2, VA_NARGS(__VA_ARGS__)), function_B(VA_ARG(0, __VA_ARGS__) + VA_ARG(1, __VA_ARGS__)), \ //2 parameters
BOOST_PP_IF(BOOST_PP_EQUAL(3, VA_NARGS(__VA_ARGS__)), function_C(VA_ARG(1, __VA_ARGS__) + …Run Code Online (Sandbox Code Playgroud) 我需要帮助理解 GNU 排序的默认算法。我认为它进行了字典排序,但是我发现了一些与此不符的行为,例如以下字符串:
alex.
alex.a
alex.Z
alexa
alex0
alexZ
alex.~
alex
alex.|
alex.}
alex.abc
Run Code Online (Sandbox Code Playgroud)
并使用类似的排序在外壳上对它们进行排序 echo 'stuff' | sort
这是我得到的结果:
alex
alex.
alex.~
alex.|
alex.}
alex0
alexa
alex.a
alex.abc
alexZ
alex.Z
Run Code Online (Sandbox Code Playgroud)
我想不通为什么alex0和alexa之间出现在alex.}和alex.a
谁可以给我解释一下这个?
我正试图弄清楚如何从命令行执行After Effects脚本.
官方文件说:
Example (for Windows):
afterfx -r c:\script_path\example_script.jsx
Run Code Online (Sandbox Code Playgroud)
没有什么适合Mac的.但是我正在尝试:
open -b com.adobe.AfterEffects --args -r /script_path/example_script.jsx
Run Code Online (Sandbox Code Playgroud)
没有任何反应.程序虽然打开了,但似乎从未调用过该脚本.
有谁想过这个?
我有一个继承自unordered_map的自定义类,如下所示:
class _map : public unordered_map<string, _pointer> {
public:
// STUFF ...
};
Run Code Online (Sandbox Code Playgroud)
让我们假设这_pointer是另一个自定义类,它的作用是帮助我处理指针的东西._pointers可以从许多不同的预定义类型构造,例如:
vector<...> v;
_pointer p = _pointer(v);
// p is now a _pointer holding v and vector<...> data
Run Code Online (Sandbox Code Playgroud)
现在,如果我想_pointer在我的地图上存储vector <...> ,我可以简单地做:
_map map;
vector<...> v;
map["a_vector"] = _pointer(v);
Run Code Online (Sandbox Code Playgroud)
它有效,但我希望能够做到这一点:
_map map;
vector<...> v;
map["a_vector"] = v;
Run Code Online (Sandbox Code Playgroud)
并将它_pointer(v)自动分配,也许通过重载map如何分配东西并明确告诉它vector<...>通过调用特定的_pointer构造函数来处理它.
我试图这样做(通过重载operator [],operator =)但似乎我不会去某个地方.任何人都可以建议我实现这种行为的方法吗?
谢谢.
常问问题:
问:为什么在标识符名称上使用_?难道你不知道这是不好的做法吗?
答:手头的问题无关紧要.问:您的代码不是RAII.
A:那么,什么?问:你为什么不使用unique_ptr/smart_ptr?你为什么直接处理指针?
答:因为我需要,而且对于手头的问题也无关紧要.问:你为什么要重载unordered_map?你为什么不用这个_OTHER_OPTION_?
答:不,谢谢,这是我需要做的.
c++ ×2
adobe ×1
cryptography ×1
gnu ×1
gnu-sort ×1
indexeddb ×1
javascript ×1
libuv ×1
linux ×1
macos ×1
macros ×1
objective-c ×1
overloading ×1
prng ×1
random ×1
scripting ×1
sorting ×1
terminal ×1