小编lin*_*llo的帖子

如何在CMake中只更改一个可执行文件的编译器标志?

我有一个CMake项目,通过\MP标志支持Visual Studio中的多处理器编译.

因为在项目构建的许多可执行文件中只有一个,我需要将\MP标志设置为false(或禁用它,因为我导入.tlb文件时出错),如何设置此目标的标志不同?

add_executable(MyProgram myprogram.cpp)
target_link_libraries(MyProgram MyLibraries)
Run Code Online (Sandbox Code Playgroud)

我应该给set_target_propertiescmake或者从整个项目中删除标志吗?谢谢!

c++ compiler-construction cmake visual-studio-2010

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

将c ++异常传播给cython - python异常

我有一个Cython 0.17.1的问题

我的函数抛出一个std::runtime_error如果文件不存在,我想以某种方式将此异常传播到我的Cython代码.

void loadFile(const string &filename)
{
    // some code, if filename doesn't exists 
    throw std::runtime_error( std::string("File doesn't exists" ) );
}
Run Code Online (Sandbox Code Playgroud)

正确包装函数后从Cython:

try:
    loadFile(myfilename)
except RuntimeError:
    print "Can't load file"
Run Code Online (Sandbox Code Playgroud)

但是这个异常总是被忽略,我如何从Python中捕获c ++异常?

c++ python exception try-catch cython

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

Cython std ::两个指针对,期望一个标识符或文字

为什么在Cython中可以包装

std::pair<int, Foo*> myPair;
Run Code Online (Sandbox Code Playgroud)

但不是

std::pair<Foo*,Bar*> myPair;
Run Code Online (Sandbox Code Playgroud)

特别是,在Cython中包装std::pair如下:

pair[int, Foo*]
Run Code Online (Sandbox Code Playgroud)

并且工作顺利,但当第一个元素也是一个指针我有问题:

pair[Foo*,Bar*] myPair2
Run Code Online (Sandbox Code Playgroud)

我越来越

pair[Foo*,Bar*] myPair2
        ^
------------------------------------------------------------
test.pyx:50:17: Expected an identifier or literal
Run Code Online (Sandbox Code Playgroud)

我在Linux上使用Cython 0.17.1,g ++ 4.4

c++ python pointers cython

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

std :: map标准分配器性能与块分配器

我读过一本关于STL容器的标准分配器,如std :: list,std :: set,std :: multi_set,std :: map,e std :: multi_map,可以用更高性能的代替块分配器.

块分配器具有更高的性能,低碎片和高效的数据缓存.

我在网上发现FSBAllocator声称比标准更快. http://warp.povusers.org/FSBAllocator/

我已经尝试使用std :: map并且发现它看起来确实更快,但我的问题是如何使STL实现比特定分配器慢得多,并且除了标准之外,另一个分配器的缺点是什么?便携性和稳健性?我的代码必须在各种体系结构(win32,osx,linux)上编译.有人有这种固定大小的块分配器的经验吗?

c++ performance memory-management stdmap allocator

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

C/C++中的快速反转平方

最近我正在分析一个程序,其中热点肯定是这个

double d = somevalue();
double d2=d*d;
double c = 1.0/d2   // HOT SPOT
Run Code Online (Sandbox Code Playgroud)

之后不使用值d2,因为我只需要值c.前段时间我已经读过关于快速平方根的Carmack方法,显然不是这种情况,但我想知道类似的算法是否可以帮助我计算1/x ^ 2.

我需要非常准确的精度,我已经检查过我的程序没有使用gcc -ffast-math选项给出正确的结果.(克++ - 4.5)

c algorithm performance square-root

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

Qt的连续构建系统

我是Qt/C++开发人员.我想设置一个持续集成环境,在提交源代码之后,它会触发一个构建过程,为我正在使用的3个平台构建代码:

  • Linux的
  • OS X.
  • Win32的

如果可能,我该如何设置此类环境.欢迎任何提示或链接.我已经阅读了关于詹金斯的内容,但我找不到任何好的教程.

c++ continuous-integration qt build

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

导入Cython模块的未定义符号错误

我想将我的一个c ++类作为Python模块提供.该类在头文件中声明,Foo.h并以.cpp实现Foo.cpp.(g ++ - 4.5,Ubuntu x86_64).这是一个非常简单的课程:

Foo.cpp:

Foo::Foo() : alfa(1.0), beta(1)
{

}

Foo::~Foo()
{
}
Run Code Online (Sandbox Code Playgroud)

Foo.h:

 class Foo
 {
 public:

  Foo()
  Foo(const Foo& orig);
  ~Foo();
  double alfa;
  int beta; 
 };
Run Code Online (Sandbox Code Playgroud)

我创建了一个setup.py如Cython教程中所示:

setup.py

from distutils.core import setup
from distutils.extension import Extension
from Cython.Distutils import build_ext

setup(
  name = 'MyDemo',
  ext_modules=[
    Extension("Foo"
          sources=["Foo.pyx"], 
          include_dirs=[".","../eigen/"],
          language="c++"),
    ],
  cmdclass = {'build_ext': build_ext},
)
Run Code Online (Sandbox Code Playgroud)

并按照cython教程的指示编写我的Foo.pyxcython模块:

Foo.pyx

cdef extern from "Foo.h":
    ctypedef struct c_Foo "Foo": …
Run Code Online (Sandbox Code Playgroud)

python distutils cython undefined-reference

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

字典,其中键是Python中的整数对

如何在Python中创建一个字符,其中键是整数对?

例如,如果我这样做:

mydict=dict()
mydict[ [1,2] ] = 'xxx'
Run Code Online (Sandbox Code Playgroud)

我收到了错误 TypeError: unhashable type: 'list'

所以我提出了两种不同的解决方案:字符串或元组作为键.

第一个解决方案似乎是在它们的字符串表示中转换整数对:

mydict=dict()
mydict[ str(1)+" "+str(2) ] = 'xxx'
Run Code Online (Sandbox Code Playgroud)

而第二个解决方案涉及元组:

mydict=dict()
mydict[ tuple([1,2]) ] = 'xxx'
Run Code Online (Sandbox Code Playgroud)

从一些实验中我发现元组解决方案比字符串解决方案慢.是否有一种更有效,更快速的方法来简单地使用两个整数作为键?

python string performance dictionary tuples

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

Qt内存的抑制文件与Valgrind泄漏

我通常用C++编写我的类,并检查它们是否在Linux平台上使用valgrind泄漏内存.在释放所有堆内存之前我不满意.

开始在Qt中编写,我发现valgrind检测到了多少泄漏,也是在一个简单的项目中.它们太多了,很难发现我的同样的泄漏.

我在某个地方读到了可能使用valgrind的抑制文件,这有助于过滤掉不需要的泄漏,但我找不到它.

我使用的是Ubuntu 11.04 x64,g ++ 4.5,Qt 4.7.有人知道如何应对这个问题吗?

c++ qt valgrind memory-leaks suppress-warnings

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

如何在CMake中使用2个不同的变量值构建程序

我最近将我的Qt项目移植qmake到了CMake.我的主程序包含一个取决于#define指令的值.

我想在外部通过指定define指令CMake并构建同一可执行文件的3个不同命名版本.

我该怎么办?

我见过set_target_properties但这只适用于库而不适用于可执行文件.

例如,我想要以下程序,

 int main()
 {

    cout << BUILDTYPE << endl;
 }
Run Code Online (Sandbox Code Playgroud)

根据我想要指定的BUILDTYPE "define" 例子,它以3种不同的风格(3个可执行文件)编译CMakeLists.txt

add_executable(myAppV1 -DBUILDTYPE=1)
add_executable(myAppV2 -DBUILDTYPE=2)
add_executable(myAppV3 -DBUILDTYPE=3)
Run Code Online (Sandbox Code Playgroud)

但这不是正确的语法.一些暗示?我得到3个可执行文件打印

c++ build cmake compiler-flags

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