小编J T*_*J T的帖子

STL哈希函数

STL是否有可用的Hash功能,这些功能是否公开?

我知道有一些使用哈希值的非标准实现(例如boost :: hash_map),而MSVC8实现了hash_map/hash_set/etc的版本.

但是有没有在C++ 98 STL中定义的Hash函数

如果没有,那么可靠散列函数的最佳非C++ 98源代码是什么?

首选源的顺序(从最可接受到最少):Boost,C++ 0x标准STL,TR1,其他第三方.

c++ algorithm boost cryptography stl

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

"%include"和"#include"之间的区别

在SWIG中,"%include"指令与标准C"#include"之间有什么区别?

例如,在所有教程中,为什么它们通常看起来像这样:

%module my_module

%{
#include "MyHeader.h"
%}

%include "MyHeader.h"
Run Code Online (Sandbox Code Playgroud)

这对我来说似乎是多余的.也许有知识的人可以澄清.

是否有一个包含C++代码的首选方法?

c c++ swig

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

C宏 - 动态#include

我试图弄清楚如何使用GCC为#include语句构建变量字符串.

我的想法是,对于我编写的每个源模块,我希望包含一个动态生成的C源头,它是在构建过程的早期创建的.

生成此文件不是问题.不幸的是,包括它在内.

到目前为止我所拥有的是(identities.h):

// identities.h

# define PASTER2(str)  #str
# define PASTER(str)   PASTER2(str ## .iden)
# define EVALUATOR(x)  PASTER(x)

# define IDENTITIES_FILE EVALUATOR(__FILE__)
# include IDENTITIES_FILE
Run Code Online (Sandbox Code Playgroud)

理想情况下,这将被使用(main.c):

//main.c

# include "identities.h"

int main() {return 0;}
Run Code Online (Sandbox Code Playgroud)

在编译之前,预处理器将在一次传递中扩展为:

//main.c (preprocessed)

# include "main.c.iden"

int main() {return 0;}
Run Code Online (Sandbox Code Playgroud)

我正在使用的两个间接级别(PASTER和EVALUATOR)是这篇文章的结果.

不幸的是,这不起作用,我留下了错误:

obj/win32/dbg/main.o
In file included from main.c:1:0:
identities.h:42:1: error: #include expects "FILENAME" or <FILENAME>
Run Code Online (Sandbox Code Playgroud)

我认为问题是include语句缺少引号..任何想法?

c macros include c-preprocessor

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

Mingw构建 - 依赖于DLL不是Windows的原生

我正在使用MinGW(GCC 4.5.0)编译我的库以作为共享库导出.我这样做是通过使用MAKE命令编译所有源文件,类似于:

gcc -shared -c mysource.cpp -o mysource.o
Run Code Online (Sandbox Code Playgroud)

最后:

gcc -shared -lstdc++ -lm -lws2_32 mysource.o -o mylib.dll
Run Code Online (Sandbox Code Playgroud)

当我对输出文件进行依赖性遍历时(例如使用http://www.dependencywalker.com/),我看到有3个依赖项:

KERNEL32.dll
MSVCRT.dll
LIBSTDC++-6.DLL
Run Code Online (Sandbox Code Playgroud)

让我的DLL依赖于不附带windows的文件对于我的最终目标来说是次优的.

有没有办法我可以设置我的系统,以便最终输出(DLL)依赖于KERNEL32MSVCRT

c++ mingw build shared-libraries

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

MVC Controller返回Chunked内容编码

所以我有一个MVC项目.此MVC项目包含一个Controller,需要将内容流回客户端.当流媒体开始时,无法确定内容长度(它是在运行中计算的).所以我打开HttpContext.Current.Response.OutputStream,并开始定期写入和刷新(我已经禁用了缓冲输出,并附加了相应的http头):

while (some condition){

   HttpContext.Current.Response.OutputStream.Write(buffer, 0, buffer.Length);
   HttpContext.Current.Response.Flush();
}
Run Code Online (Sandbox Code Playgroud)

如果我然后强制关闭流:

HttpContext.Current.Response.Close();
Run Code Online (Sandbox Code Playgroud)

它没有正确地结束Chunked内容(它不会在末尾追加0长度的块,以向客户端指示EOF).

如果我更优雅地关闭输出流:

HttpContext.Current.Response.End();
Run Code Online (Sandbox Code Playgroud)

要么

HttpContext.Current.ApplicationInstance.CompleteRequest();
Run Code Online (Sandbox Code Playgroud)

它正确地关闭了流(附加到结尾的零长度块),但是我得到了应用程序抛出的异常,表明它无法将HTTP头插入输出流,因为流已经被写入了!

在这两种情况下,Controller都会继续返回null(或EmptyActionResult).

我假设异常是由于MVC堆栈要求每个ActionResult在Controller完成执行后设置HTTP头而引起的.如果是这种情况,如何在MVC中实现Chunked流?

提前致谢!

编辑:抛出的确切异常是:

Uncaught Exception: System.Web.HttpException (0x80004005): Server cannot set status after HTTP headers have been sent.
   at System.Web.Http.WebHost.HttpControllerHandler.EndProcessRequest(IAsyncResult result)
   at System.Web.Http.WebHost.HttpControllerHandler.System.Web.IHttpAsyncHandler.EndProcessRequest(IAsyncResult result)
   at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
   at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) 
Run Code Online (Sandbox Code Playgroud)

asp.net asp.net-mvc chunked-encoding http-headers

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

提升asio ConstBufferSequence - c ++模板

我希望有关C++模板的一些指导.我一直在使用该boost::asio库进行TCP通信.到目前为止,我一直在使用内置在boost :: asio库中的存储容器.例如:

boost::array<char, 128> buf;
boost::system::error_code error;
size_t len = socket.read_some(boost::asio::buffer(buf), error);
Run Code Online (Sandbox Code Playgroud)

要从套接字读取,我只需boost::asio::buffer在我的boost::array对象周围包装一个类型的缓冲区.这很好,但现在我想反向工作.也就是说,我想回写插槽,从我已经拥有的一些自定义存储类中提取数据.我的问题是,如何理解boost :: asio :: buffer可以包装的模板类型要求,或者更一般地说,指定的参数类型:

template<typename ConstBufferSequence>
std::size_t send(   
   const ConstBufferSequence & buffers
);
Run Code Online (Sandbox Code Playgroud)

API列出的要求ConstBufferSequence,但我不能让这种正面或反面.有人可以帮我理解吗?我想要传递给"发送"函数的类型需要公开哪些方法?

c++ templates boost boost-asio

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

C++ std库链接不同的C++标准

我正在使用Cygwin编译一个项目(GCC v4.5.0),我遇到了奇怪的链接器问题.我希望有一些专业知识的人可以提供帮助.

错误:未定义引用 std::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string(std::basic_string<char, std::char_traits<char>, std::allocator<char> >&&)

但是,当我使用gcc编译器标志进行编译时,链接才会失败: -std=c++0x 当我没有指定标准时,它会成功.

一些说明:

  1. 我通知gcc手动链接标准库和编译器标志: -lstdc++
  2. 符号依赖性源自Boost库头文件(v.1.45.0): boost::units::detail::utility.hpp, function: std::string demangle(const char* name);
  3. 应用程序使用MinGW gcc v4.5.0正确编译和链接.

问题:

  1. 编译的标准库通常是否包含不同C++标准的不同符号?
  2. 在GCC中,符号名称的变化是否随着C++标准的不同而变化?
  3. 为什么链接器找不到符号std::basic_string可以保证它可以找到libstdc++.a

在此先感谢大家.

-jt

c++ linker gcc cygwin c++11

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

具有检查点的开源压缩算法

我使用gcc 4.5.0和msvc8/9在C++中工作.

我希望能够压缩文件(10 Gb),然后使用我的应用程序打开此文件.

但是,文件内容是这样的,每当我使用它们时,我不一定需要它们内部的所有内容.

因此,例如,有一次我打开其中一个压缩文件,并决定我想在不加载文件的情况下寻找文件的95%.使用像gzip这样的压缩算法,这是不可能的:我必须解压缩文件的前95%,然后才能解压缩最后的5%.

So, are they any libraries similar to gzip, that are open source 
and available for commercial use, that have built in check points, 
to re-sync the decompression stream?
Run Code Online (Sandbox Code Playgroud)

我认为也许一个失败的音频编解码器可能会成功.我知道其中一些算法有检查点,因此您可以通过音乐文件进行搜索,而不必等待音乐文件的全部内容被解压缩.使用音频编解码器进行数据解压缩是否存在缺陷?

谢谢!

c++ compression algorithm open-source gzip

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

为什么以析取范式表达代码很重要?

在我工作的公司,最近有一项规定,所有“高度可见”的布尔逻辑都必须以析取范式表示。

例如(尽管这个概念与语言无关),

#if (defined(A) || defined( B )) || (defined(C) && defined(D))
Run Code Online (Sandbox Code Playgroud)

必须替换为:

#if defined(A) || (defined(C) && defined(D)) || defined(B)
Run Code Online (Sandbox Code Playgroud)

强制要求代码必须以这种方式表达的动机是什么?有什么优点?

language-agnostic logic software-quality boolean-expression

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

ToDataSourceResult扩展不填充DataSourceResult对象

KendoUI添加的扩展方法(ToDataSourceResult)似乎在Pages> Page#1上失败.它在第一次加载页面时工作正常,但是当我尝试使用它进行虚拟滚动时,为了获取页面,2,3,4 ... N异步,该方法忽略了我正在尝试的IEnumerable对象中的所有数据改造.

我的代码如下:

我有一个MVC控制器,可以像这样获取数据:

Database database = Database.GenerateDatabase();
ResultSet queryResults = database.GetEvents( 
    FilterHelper.GenerateQueryCriteria((List<IFilterDescriptor>) request.Filters, request.Page, request.PageSize) 
);
Run Code Online (Sandbox Code Playgroud)

Database.GetEvents返回一个对象,如下所示:

public class ResultSet {

    public List<ResultSetRow> Set;
    public int PageRowCount;
    public int TotalRecordCount;
}
Run Code Online (Sandbox Code Playgroud)

每个ResultSetRow,是一个具有1个字符串,2个int作为属性的类的实例.

此时,我设置了一个断点并检查ResultSet.Set的内容.数据库使用request.PageSize指定的记录正确填充List.我已确认正在为任何和所有页码返回结果.

下一阶段,一切都很糟糕:

DataSourceResult result = ((IEnumerable<ResultSetRow>) queryResults.Set).ToDataSourceResult(request);
Run Code Online (Sandbox Code Playgroud)

我检查DataSourceResult对象的内容,其数组属性'Data'为空.

为什么我的模型(ResultSetRow)无法转换为Kendo的DataSourceResult对象?

一些额外的信息:

  • 未使用聚合,组,排序和过滤器.
  • Database.GetEvents返回的结果数与所请求页面的大小相匹配.

感谢您的帮助SO社区

asp.net-mvc kendo-ui

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