我有一个char*和我从库中收到的数据长度,我需要将数据传递给一个带有istream的函数.
我知道我可以创建一个字符串流但是会复制所有数据.而且,数据肯定会有0,因为它是一个zip文件,创建一个字符串流将把数据带到我认为的第一个0.
有没有办法从char*创建一个istream,它的大小没有复制所有数据?
某些编程语言具有创建多行文字字符串的功能,例如:
some stuff ... <<EOF
this is all part of the string
as is this
\ is a literal slash
\n is a literal \ followed by a literal n
the string ends on the next line
EOF
Run Code Online (Sandbox Code Playgroud)
问题:Clojure有类似的东西吗?我意识到"处理多行很好,但我希望它也能正确处理\为文字.
谢谢!
在Java中编写代码时,通过模拟协作对象,使用组合和依赖注入非常有帮助,从而可以轻松地进行纯单元测试.
我发现在Erlang中做同样的事情并不那么简单,而且代码更脏.
这可能是我的错,因为我对Erlang很新,并且对JUnit,EasyMock和java接口非常沉迷......
假设我有这个愚蠢的功能:
%% module mymod
handle_announce(Announce) ->
AnnounceDetails = details_db:fetch_details(Announce),
AnnounceStats = stats_db:fetch_stats(Announce),
{AnnounceDetails, AnnounceStats}.
Run Code Online (Sandbox Code Playgroud)
在单元测试时mymod,我只想证明details_db并stats_db使用正确的参数调用,并且正确使用了返回值.在其他地方测试details_db和stats_db生成正确值的能力.
为了解决这个问题,我可以这样重构我的代码:
%% module mymod
handle_announce(Announce, [DetailsDb, StatsDb]) ->
AnnounceDetails = DetailsDb:fetch_details(Announce),
AnnounceStats = StatsDb:fetch_stats(Announce),
{AnnounceDetails, AnnounceStats}.
Run Code Online (Sandbox Code Playgroud)
并以这种方式进行测试(基本上将调用直接存入测试模块):
%% module mymod_test
handle_announce_test() ->
R = mymod:handle_announce({announce, a_value}, [?MODULE, ?MODULE, ?MODULE]),
?assertEqual({details,stats}, R).
fetch_details({announce, a_value}) ->
details.
fetch_stats({announce, a_value}) ->
stats.
Run Code Online (Sandbox Code Playgroud)
它工作正常,但应用程序代码变脏了,我总是要随身携带那些丑陋的模块列表.
我尝试了几个模拟库(erlymock和(另一个),但我并不满意.
你如何对你的erlang代码进行单元测试?
谢谢!
我在ACE,Boost和wxWidgets方面拥有丰富的经验.我最近找到了POCO库.有没有人对它们有任何经验,以及它们在性能和可靠性方面与ACE,Boost和wxWidgets相比如何?
我特别感兴趣用POCO取代ACE.我无法让ACE使用带有x64目标的VS2008进行编译.我主要使用ACE_Task,所以我认为我可以用Poco的线程和消息队列替换它们.
我感兴趣的POCO的其他部分是HTTPServer,HTTPClient和LayeredConfiguration.这些库与Boost和wxWidgets中的库类似,但我尝试将wxWidgets的使用限制为GUI组件,而类似的Boost库则很难.
我对任何人可以分享关于POCO的任何经验感兴趣,无论好坏.
如何正确执行POST到HTTPS服务器并正确嵌入登录数据.下面的代码不会返回任何cookie(在Wininet中它会).我想知道POCO HTTP库如何处理HTTP重定向?
MyApp()
{
try
{
const Poco::URI uri( "https://localhost.com" );
const Poco::Net::Context::Ptr context( new Poco::Net::Context( Poco::Net::Context::CLIENT_USE, "", "", "rootcert.pem" ) );
Poco::Net::HTTPSClientSession session(uri.getHost(), uri.getPort(), context );
Poco::Net::HTTPRequest req(Poco::Net::HTTPRequest::HTTP_POST, "/login.php" );
req.setContentType("Content-Type: application/x-www-form-urlencoded\r\n");
req.setKeepAlive(true);
std::string reqBody("username=???&password=???&action_login=Log+In\r\n\r\n");
req.setContentLength( reqBody.length() );
//Poco::Net::HTTPBasicCredentials cred("???", "???");
//cred.authenticate(req);
session.sendRequest(req) << reqBody;
Poco::Net::HTTPResponse res;
std::istream& rs = session.receiveResponse(res);
std::string resp;
std::vector<Poco::Net::HTTPCookie> cookies;
res.getCookies( cookies );
}
catch( const Poco::Net::SSLException& e )
{
std::cerr << e.what() << ": " << e.message() << std::endl;
}
catch( const std::exception& …Run Code Online (Sandbox Code Playgroud) 我需要一个可移植的C++库来进行IPC.到目前为止我使用了fork()和SysV共享内存,但这限制了我使用Linux/Unix.我发现有3个主要的C++库提供便携式解决方案(包括Windows和Mac OS X).我真的很喜欢Boost,并且想要使用它,但我需要进程,看起来这只是一个实验分支,直到现在!?我以前从未听说过ACE或POCO,因此我被困住了,我不知道选择哪一个.我需要fork(),sleep()(usleep()会很棒)和共享内存当然.性能和文档也是重要的标准.
谢谢你的帮助!
在Erlang shell中,flush()可以用来获取shell进程的消息队列.
是否可以通过了解其PID来了解另一个进程的消息队列长度?
我碰到了这个问题,我不确定我的解决方案是否是最佳的.
给定N加权(Wi)和可能重叠的间隔(表示会议时间表),找到进行所有会议所需的会议室的最小数量"&".
|---10------|. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .|---------8---------|
|------8-----| |----------10-----------|
|--------6-------|
Run Code Online (Sandbox Code Playgroud)
对于上述时间表,我们需要两个10和10个容量的会议室.( 我对么 ? )
如果我们有一个容量大于需要的会议室使用它,如果没有符合标准的会议室,建立新房间或增加现有房间,请从一个房间,并从左侧穿过间隔.新的能力.
例:
10点开始 - {10}
8点开始 - {10,8}
10月底结束 - {10-free,8}
6点开始 - {10,8}
结束8 - {10,8-free}
10的开头= {10,8 + = 2}或{10,10}
等等.....
这基本上是贪心的..
我想使用EUnit测试一些第三方Erlang代码.
代码功能的输出使用显示在标准输出上io:format/2.我想捕获该输出并对?assert将要打印的字符串执行测试.我无法修改第三方代码.
这是用Erlang做到这一点的方法吗?(例如,在Java中,我可以简单地将System.setOut()用于输出流).
更新:
在group_leader/2似乎是在正确的轨道上.
但是,我仍然没有看到它如何允许我捕获打印的字符串,io:format所以我可以测试我的断言.一个非常简单的代码示例是:
result(Value) ->
io:format("Result: ~w~n", [Value]).
test_result() ->
?assertMatch("Result: 5~n", result(5)).
Run Code Online (Sandbox Code Playgroud)
显然,函数的返回result/1是原子ok,但实际上我想测试输出到控制台的字符串(即"Result: 5~n").
这种方法我错了,因为似乎没有其他人这样做(根据我缺乏搜索结果判断)?
背景:第三方代码是一个交互式控制台应用程序,因此所有功能仅用于io:format显示结果.