FFTW手册说它的fftw_complex类型std::complex<double>与STL中的类有点兼容.但这对我不起作用:
#include <complex>
#include <fftw3.h>
int main()
{
std::complex<double> x(1,0);
fftw_complex fx;
fx = reinterpret_cast<fftw_complex>(x);
}
Run Code Online (Sandbox Code Playgroud)
这给了我一个错误:
error: invalid cast from type ‘std::complex<double>’ to type ‘double [2]’
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
我有一些由autotools构建的C++项目.
该项目使用了一些我也写的库.库的源代码作为git的子模块导入到项目中.每个库都有自己的autotools文件.
说,我有:
src/<my src files>
modules/libfoo/
libbar/
Makefile.am
Configure.in
<other autotools junk>
Run Code Online (Sandbox Code Playgroud)
我想要的是以某种方式将库包含到主项目编译链中.我想只是包含了Makefile.am的subdir是不够的,因为可以在configure.am中重新进行一些检查.
我正在使用RESTful API为某些服务编写Web应用程序.该API可通过https://api.example和app https://app.example获取.使用CORS的简单GET请求在Chrome和Firefox中运行良好.某些方法通过POST接受数据,并在Location头中使用新的uri返回303代码.
预检OPTIONS请求很好:
Request Method:OPTIONS
Status Code:200 OK
Run Code Online (Sandbox Code Playgroud)
请求标题
Accept:*/*
Accept-Charset:UTF-8,*;q=0.5
Accept-Encoding:gzip,deflate,sdch
Accept-Language:en-US,en;q=0.8,ru;q=0.6
Access-Control-Request-Headers:origin, authorization, content-type
Access-Control-Request-Method:POST
Connection:keep-alive
DNT:1
Host:api.example
Origin:https://app.example
Referer:https://app.example/app/
User-Agent:Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.32 (KHTML, like Gecko) Chrome/27.0.1425.0 Safari/537.32 SUSE/27.0.1425.0
Run Code Online (Sandbox Code Playgroud)
响应标题
Access-Control-Allow-Credentials:true
Access-Control-Allow-Headers:Authorization, Content-Type
Access-Control-Allow-Methods:GET,POST,PUT,DELETE,HEAD,OPTIONS
Access-Control-Allow-Origin:https://app.example
Access-Control-Expose-Headers:*
Access-Control-Max-Age:3628800
Connection:keep-alive
Content-Length:0
Date:Sun, 05 May 2013 15:22:50 GMT
Server:nginx/1.2.5
Run Code Online (Sandbox Code Playgroud)
然后实际请求在收到303之后才停止:
Request URL:https://api.example
Request Method:POST
Status Code:HTTP/1.1 303 See Other
Run Code Online (Sandbox Code Playgroud)
响应标头:
Server:nginx/1.2.5
Location:https://api.example/some_url
Date:Sun, 05 May 2013 15:27:49 GMT
Content-Type:application/json
Content-Length:0
Connection:keep-alive
Access-Control-Max-Age:3628800
Access-Control-Expose-Headers:*
Access-Control-Allow-Origin:https://app.example
Access-Control-Allow-Methods:GET,POST,PUT,DELETE,HEAD,OPTIONS …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用openMP并行化我的程序.该程序大量使用STL迭代器.这是说,是的OpenMP 3.0可以解决这个问题:
std::vector<int> N(2*N_max+1);
std::vector<int>::const_iterator n,m;
#pragma omp parallel for
for (n=N.begin(); n!=N.end(); ++n){
//Task to be in parallel
};
Run Code Online (Sandbox Code Playgroud)
但是我收到以下错误:
error: invalid controlling predicate
Run Code Online (Sandbox Code Playgroud)
我正在使用gcc 4.5.0,(4.4.0中实现的openMP3),我的构建字符串是:
g++ -O0 -g3 -Wall -c -fmessage-length=0 -fopenmp -MMD -MP
Run Code Online (Sandbox Code Playgroud) 考虑我有一个用gen_fsm实现的FSM.对于某个StateName中的某个事件,我应该将数据写入数据库并向用户回复结果.所以以下StateName由函数表示:
statename(Event, _From, StateData) when Event=save_data->
case my_db_module:write(StateData#state.data) of
ok -> {stop, normal, ok, StateData};
_ -> {reply, database_error, statename, StateData)
end.
Run Code Online (Sandbox Code Playgroud)
其中my_db_module:write是实现实际数据库写入的非功能代码的一部分.
我看到这个代码存在两个主要问题:第一,FSM的纯功能概念与非功能代码的一部分混合在一起,这也使得FSM的单元测试变得不可能.其次,实现FSM的模块依赖于my_db_module的特定实现.
在我看来,两种解决方案是可能的:
实现my_db_module:write_async作为向某个进程处理数据库发送异步消息,不回复statename,在StateData中保存From,切换到wait_for_db_answer并将数据库管理进程中的结果作为handle_info中的消息等待.
statename(Event, From, StateData) when Event=save_data->
my_db_module:write_async(StateData#state.data),
NewStateData=StateData#state{from=From},
{next_state,wait_for_db_answer,NewStateData}
handle_info({db, Result}, wait_for_db_answer, StateData) ->
case Result of
ok -> gen_fsm:reply(State#state.from, ok),
{stop, normal, ok, State};
_ -> gen_fsm:reply(State#state.from, database_error),
{reply, database_error, statename, StateData)
end.
Run Code Online (Sandbox Code Playgroud)
这种实现的优点是可以从eunit模块发送任意消息而不触及实际数据库.解决方案遇到可能的竞争条件,如果db先前回复,则FSM更改状态或另一个进程将save_data发送到FSM.
使用在StateData中的init/1期间编写的回调函数:
init([Callback]) ->
{ok, statename, #state{callback=Callback}}.
statename(Event, _From, StateData) when Event=save_data->
case StateData#state.callback(StateData#state.data) of
ok -> {stop, normal, ok, StateData}; …Run Code Online (Sandbox Code Playgroud)考虑我有一个容器std::map<int, std::shared_ptr<MyClass>>,我想填写外部函数,避免处理其内容.所以我有
typedef Container std::map<int, std::shared_ptr<MyClass>>
Container&& f(){
Container bar;
auto foo = std::shared_ptr<MyClass>(new MyClass());
bar.insert(std::make_pair(0,foo));
std::cout<<bar.at(1)->print_smth<<'\n'; //This works
return std::move(bar);
}
int main(){
Container baz(f());
std::cout<<bar.at(1)->print_smth<<'\n'; //This doesn't
// Container baz has element 1, but shared_ptr is invalidated, because it has 0 references.
}
Run Code Online (Sandbox Code Playgroud)
如果我使用传统的复制构造函数,一切都按预期工作.
c++ ×4
ajax ×1
autotools ×1
cors ×1
erlang ×1
erlang-otp ×1
fftw ×1
for-loop ×1
git ×1
javascript ×1
map ×1
openmp ×1
rest ×1
shared-ptr ×1
stl ×1