小编Jon*_*han的帖子

将SCons设置为自动链接

我正在使用google的cpplint.py来验证我的项目中的源代码是否符合Google C++ Style Guide中规定的标准.我们使用SCons进行构建,所以我想通过让SCons首先读取所有.h和.cc文件然后在它们上运行cpplint.py来自动化该过程,只有在它通过时才构建文件.问题如下:

  1. 在SCons中,我如何预先挂钩构建过程?在通过linting之前,不应编译任何文件.
  2. cpplint不返回退出代码.如何在SCons中运行命令并检查结果是否与正则表达式匹配?IE,如何输出文本?
  3. 项目很大,无论#1和#2的解决方案如何,当-j选项传递给SCons时,它应该同时运行.
  4. 我需要一个白名单,允许一些文件跳过lint检查.

c++ python lint scons

10
推荐指数
1
解决办法
2201
查看次数

Haskell"不"类型约束

我试图以归纳方式定义一对类实例.那是:

class Foo a b | a -> b where
  foo :: a -> b

instance (not?)Foo a => Bar a b
  foo x = ...

instance Foo a => Bar a b
  foo x = ...
Run Code Online (Sandbox Code Playgroud)

第一个实例确定基本操作,秒递归调用foo.有没有办法做到这一点?一个很好的例子是扁平化列表,在第一种情况下它是标识函数,在第二种情况下它是concat的递归应用.

haskell types

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

提升ASIO缓冲不起作用

我正在编写一个使用ASIO/UDP在单个远程/区域设置端点对之间发送和接收的网络应用程序.我曾使用udp :: socket :: receive来接收数据,我的代码中的所有内容都在逻辑上工作,但是我丢失了大量的数据包.我发现的是,在接收功能未被阻止时收到的任何数据包都丢失了 - 它没有缓冲.这特别奇怪,因为我使用以下命令将接收缓冲区设置为2MB:

sock_udp.connect( remote_endpoint );
sock_udp.set_option( boost::asio::socket_base::receive_buffer_size(2*1024*1024) );
Run Code Online (Sandbox Code Playgroud)

这个和事实,如果我只发送两个大约100字节的数据包,如果我花费任何时间处理第一个,我仍然会丢失第二个数据包.

我认为这可能是udp :: socket :: receive的缺陷,所以我重新编写了我的网络代码以供使用,udp::socket::async_receive但我仍然遇到同样的问题.也就是说,一旦我的处理程序被调用,我丢弃任何数据包,直到我再次调用async_receive.

我从根本上误解了什么吗?是否有一种不同的方法我应该使用boost来缓冲传入的数据包?

如果有帮助的话,我已经验证了这在XCode中的OS X中使用他们的自定义gcc4.2构建以及使用gcc4.5的Ubuntu 10.10都会发生.我还没有能够在Windows中尝试它.

c++ boost udp network-programming boost-asio

5
推荐指数
0
解决办法
1793
查看次数

Haskell + StablePtr

我有一个调用 Haskell 的 C 函数。C 函数传递 Haskell 数据类型的 StablePtr,Haskell 代码需要更改其某些值。这样做的有效方法是什么?例如,考虑以下

foreign export ccall editChar :: StablePtr MyObject -> CInt -> CChar -> IO ()

data MyObject = Obj String

editChar :: StablePtr MyObject -> CInt -> CChar -> IO ()
editChar cMyObjectPtr index newChar = do
  -- Code goes here
Run Code Online (Sandbox Code Playgroud)

如何将 editChar 实现为尽可能高效和 Haskelly,以便将索引处的 Char 设置为newChar?最终,被变异的对象在内存方面将是相当大的,并且有许多子组件,因此作为 editChar 的结果返回一个新对象是不可能的。

interop haskell

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

C++编译时间检查副作用

有些编译器支持pure和const,但是有什么要求检查这些断言是否成立?例如:

int global_value = 42;
const int global_value_const = 42;

int MyPureFunction  __attribute__ (( pure_check? )) (
  int input,
  int* input_ptr,
  const int* input_const_ptr,
  int foo& input_ref,
  const int& input_const_ref)
{
   int temporary = input;    // Valid, can read local but mutable state.

   global_value += temporary;        // Invalid, cannot mutate external state
   temporary += global_value;        // Invalid,  cannot read non-const global data.
   temporary += global_value_const;  // Valid, can read const global data.

   temporary += *input_ptr;        // Invalid, cannot …
Run Code Online (Sandbox Code Playgroud)

c++ functional-programming purely-functional

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

C++/CLI + Boost + Mono

概述:我有一个符合标准的C++ API,它使用Boost库,我想支持它作为Windows,OS X和Linux上的本机,可静态链接的库,我想在Windows和Mono上包装.NET在OS X和Linux上.

细节:目前我已经为所有平台进行本地编译 - 这是使用标准C++和Boost.我还得到它在Windows上编译和运行C++/CLI,但我被迫使用Boost .DLLs.下一步我不知道从哪里开始,因为我从未尝试在*nix系统上使用共享库.我知道Boost在Linux上提供了共享库(我猜想在OS X上也是如此),但是这些只是在我的Visual Studios编译的C++/CLI可执行文件中自动神奇地工作,还是我需要做一些工作?MonoDevelop没有C++/CLI编译器,但据说Visual Studios编译的CLI工作得很好......这是动态链接库让我感到困惑.

.net mono cross-platform c++-cli dynamic-linking

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