小编lea*_*vst的帖子

转换浮点值时设置std :: to_string的精度

在C++ 11中,当给定输入值type 或时,std :: to_string默认为6位小数.改变这种精度的推荐方法或最优雅的方法是什么?floatdouble

c++ string double floating c++11

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

我应该分配还是重置unique_ptr?

鉴于自有对象的生命周期与其所有者链接的常见情况,我可以使用两种方式之一的唯一指针..

它可以分配:

class owner
{
    std::unique_ptr<someObject> owned;    
public:
    owner()
    {
        owned=std::unique_ptr<someObject>(new someObject());        
    }
};
Run Code Online (Sandbox Code Playgroud)

可以使用重置方法:

class owner
{
    std::unique_ptr<someObject> owned;    
public:
    owner()
    {
        owned.reset(new someObject());
    }
};
Run Code Online (Sandbox Code Playgroud)

为了最佳实践,我应该更喜欢一种形式吗?

编辑:对不起伙计们.我简化了这个.堆分配发生在初始化方法中,而不是在ctor中.因此,我无法使用初始化列表.

c++ smart-pointers unique-ptr c++11

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

C++ 11观察者模式(信号,插槽,事件,更改广播/侦听器,或任何您想要调用的模式)

随着C++ 11中所做的更改(例如包含std::bind),是否有一种推荐的方法来实现一个简单的单线程观察者模式,而不依赖于核心语言或标准库(如boost::signal)之外的任何东西?

编辑

如果有人可以发布一些代码,显示如何boost::signal使用新的语言功能减少依赖,那仍然非常有用.

c++ boost signals observer-pattern c++11

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

如何检查是否在cmake中设置了环境变量

我在bash配置文件中设置了一个环境变量,所以我可以在终端中看到它就好了..

blah/builds $ echo $ THING

如何在cmake消息中显示它并检查它是否已设置?我尝试了以下内容,但它只是显示空白的内容并跳过if语句的主体

message("THING:" $ENV{THING})
if(DEFINED ENV{THING})
    message(STATUS "THING environment variable defined")
    # some more commands
endif()
Run Code Online (Sandbox Code Playgroud)

bash cmake environment-variables

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

使用CMake将多个静态库合并为一个

我有一个非常类似于cmake邮件列表中描述的问题,我们有一个依赖于许多静态库的项目(所有静态库都是从各个子模块中的源代码构建的,每个子模块都有自己的CMakeLists.txt描述每个库的构建过程)我想组合成一个静态库,以便向消费者发布.我的库的依赖性可能会发生变化,我不想让开发人员在这些变化的后面进一步负担.简洁的解决方案是将所有lib捆绑到一个单独的lib中.

有趣的是,target_link_libraries在设置目标mylib和使用它时,该命令不会结合所有静态..

target_link_libraries(mylib a b c d)
Run Code Online (Sandbox Code Playgroud)

但是,奇怪的是,如果我将mylib项目作为可执行项目的子模块,并且只mylib在顶级可执行文件CMAkeLists.txt中链接,那么该库似乎确实是组合在一起的.即,当我将目标设置为仅构建时,mylib为27 MB,而不是3 MB mylib.

有一些解决方案描述了将lib解压缩到目标文件并重新组合(这里这里),但是当CMake看起来完全能够自动合并lib时,这似乎非常笨拙,如上例所述.它有一个我失踪的神奇命令,或推荐的优雅方式制作发布库?

c c++ cmake static-libraries

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

通缉:一个匿名函数返回1个以上输出的Matlab示例

我使用匿名函数进行简单的数据值转换.匿名函数使用以下语法定义

sqr = @(x) x.^2;
Run Code Online (Sandbox Code Playgroud)

我想有一个简单的匿名函数,它返回多个输出,可以按如下方式使用...

[b,a] = myAnonymousFunc(x);
Run Code Online (Sandbox Code Playgroud)

Matlab文档表明这是可能的,但它没有给出定义这样一个函数所需语法的示例.

http://www.mathworks.co.uk/help/techdoc/matlab_prog/f4-70115.html#f4-71162

定义这样一个函数的语法是什么[ 在一行中,就像我帖子顶部的代码示例 ]?

matlab arguments function anonymous-function

23
推荐指数
3
解决办法
6230
查看次数

iOS上的Google协议缓冲区

是适用于iOS的metasyntactic静态库...

http://code.google.com/p/metasyntactic/wiki/ProtocolBuffers

...兼容常规的旧C++编译的原型文件?我希望使用捆绑的编译器生成的OBJ-C.

有没有办法编译谷歌为iOS提供的库?

c++ protocol-buffers ios

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

std :: array instantiation错误

这里有一个简单的问题.我试图使用std::array并在第一个障碍中绊倒错误...

implicit instantiation of undefined template 'std::__1::array<char,10>'
Run Code Online (Sandbox Code Playgroud)

给出错误的代码如下所示.我现在可以解决它std::map,但我确定修复必须简单!

enum  p_t   {
    EMPTY = 0
    ,BORDER_L
    // ...
    ,BORDER_BR
    ,DATUM
    ,NUMEL    };

class PlotChars
{
    array<char, p_t::NUMEL> charContainer;
    // error on this ^ line:
    //   implicit instantiation of undefined template 'std::__1::array<char,10>'
};
Run Code Online (Sandbox Code Playgroud)

c++ arrays containers c++11

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

带有提升的C++ 11占位符

这段代码......

int main()
{
    using namespace std::placeholders;
    ClassA a;
    ClassB b, b2;
    a.SigA.connect( std::bind(&ClassB::PrintFoo, &b) );
    a.SigB.connect( std::bind(&ClassB::PrintInt, b,  _1));
    a.SigB.connect( std::bind(&ClassB::PrintInt, &b2, _1));

    a.SigA();
    a.SigB(4);
}
Run Code Online (Sandbox Code Playgroud)

给出编译错误,"错误:引用'_1'是不明确的"

它可以通过完全限定占位符来修复...

int main()
{
    // using namespace std::placeholders;
    ClassA a;
    ClassB b, b2;
    a.SigA.connect( std::bind(&ClassB::PrintFoo, &b) );
    a.SigB.connect( std::bind(&ClassB::PrintInt, b,  std::placeholders::_1));
    a.SigB.connect( std::bind(&ClassB::PrintInt, &b2, std::placeholders::_1));

    a.SigA();
    a.SigB(4);
}
Run Code Online (Sandbox Code Playgroud)

...但为什么第一个代码片段不起作用?

编辑

为了防止任何歧义,我正在使用Clang和Boost 1.52进行编译,--stdlib=libc++ -std=c++0x整个代码块就是这个......

#include <boost/signals2.hpp>
#include <iostream>

struct ClassA
{
    boost::signals2::signal<void ()>    SigA;
    boost::signals2::signal<void (int)> SigB;
};

struct ClassB
{ …
Run Code Online (Sandbox Code Playgroud)

c++ boost c++11

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

重载'operator +'必须是一元或二元运算符错误

按照这个答案给出的建议,我+在我的简单Point类中重载了运算符如下(+ =重载工作正常).

Point operator+ (Point p1, const Point& p2)
{
    return std::move(p1 += p2);
}
Run Code Online (Sandbox Code Playgroud)

但我得到一个错误说

重载'operator +'必须是一元或二元运算符(有3个参数)

怎么了?

c++ operator-overloading c++11

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