小编gal*_*dog的帖子

问题是将STL复杂<double>转换为fftw_complex

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)

我究竟做错了什么?

c++ complex-numbers fftw reinterpret-cast

14
推荐指数
3
解决办法
9136
查看次数

如何使用autotools处理子项目?

我有一些由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中重新进行一些检查.

c++ git autotools

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

为什么浏览器不遵循使用XMLHTTPRequest和CORS的重定向?

我正在使用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)

javascript ajax rest google-chrome cors

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

OpenMP和STL风格

我正在尝试使用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)

c++ for-loop stl openmp

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

OTP的原则.如何在实践中分离功能和非功能代码?

考虑我有一个用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的特定实现.

在我看来,两种解决方案是可能的:

  1. 实现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.

  2. 使用在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)

erlang erlang-otp

6
推荐指数
1
解决办法
538
查看次数

如何正确处理带有移动构造函数的shared_ptr映射?

考虑我有一个容器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++ map shared-ptr

4
推荐指数
1
解决办法
5305
查看次数