小编nil*_*ils的帖子

为什么写入临时字符串流对象只打印对象地址?

以下代码段是我使用的记录器的简化版本.它扩展std::ostringstream并可以使用<<-operator 填充.销毁后,所有内容都会写入std::cout.

将(<<)直接写入临时对象,Logger()我希望它能打印输入,但是,它只打印某些东西的地址std::cout.写入临时对象的引用时Logger().stream(),按预期工作.

为什么会这样?

顺便说一句,这种行为只发生在我必须使用的C++ 98-land(ideone)中.使用C++ 11(coliru)和C++ 14(ideone)时,两个调用变量都按预期工作.C++ 11/14有什么不同?

#include <iostream>
#include <sstream>

class Logger : public std::ostringstream
{
public:
    ~Logger()
    {
        std::cout << this->str() << std::endl;
    }

    Logger& stream()
    {
        return *this;
    }
};

int main( int argc, char ** argv )
{
    // 1.
    // Prints an address, e.g. 0x106e89d5c.
    Logger() << "foo";

    // 2.
    // Works as …
Run Code Online (Sandbox Code Playgroud)

c++ c++98

22
推荐指数
3
解决办法
904
查看次数

使用PARENT_SCOPE设置的变量在相应的子范围中为空.为什么?

请考虑以下最小示例:

.
??? bar
?   ??? CMakeLists.txt
??? CMakeLists.txt
Run Code Online (Sandbox Code Playgroud)

这里./CMakeLists.txt

project( foo )
cmake_minimum_required( VERSION 2.8 )

set( FOO "Exists in both, parent AND in child scope." )

add_subdirectory( bar )
message( STATUS "Variable BAR in ./     = ${BAR}" )
message( STATUS "Variable FOO in ./     = ${FOO}" )
Run Code Online (Sandbox Code Playgroud)

并且./bar/CMakeLists.txt

set( BAR "Exists in parent scope only." PARENT_SCOPE )
message( STATUS "Variable BAR in ./bar/ = ${BAR}" )
Run Code Online (Sandbox Code Playgroud)

输出的相关部分cmake是这样的:

...
-- Variable BAR in …
Run Code Online (Sandbox Code Playgroud)

cmake

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

"条件"解析命令行参数

说我有一个可执行文件(在mac,win和linux上运行)

 a.out [-a] [-b] [-r -i <file> -o <file> -t <double> -n <int> ]
Run Code Online (Sandbox Code Playgroud)

其中一个参数[ ]意味着它是可选的.但是,如果最后一个参数-r设置,那么-i,-o,-t,和-n必须提供的,太.

有很多优秀的C++ - 用于解析命令行参数的库,例如gflags(http://code.google.com/p/gflags/),tclap(http://tclap.sourceforge.net/), simpleopt(http://code.jellycan.com/simpleopt/),boost.program_options(http://www.boost.org/doc/libs/1_52_0/doc/html/program_options.html)等.但我想知道如果有一个允许我直接编码参数之间的这些条件关系,无需手动编码错误处理

if ( argR.isSet() && ( ! argI.isSet() || ! argO.isSet() || ... ) ) ...
Run Code Online (Sandbox Code Playgroud)

并手动设置--help.

tclap允许XOR参数,例如,-a或者-b是允许的,但不是两者.所以,在那个术语中,参数的AND会很好.

有没有人知道一个多功能,轻量级,跨平台的库可以做到这一点?

c++ terminal command-line command-line-arguments

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

CMake ExternalProject:如何指定根CMakeLists.txt的相对路径?

似乎CMake ExternalProject总是假定外部项目的根目录是源目录.但如果不是这样呢?

请考虑以下示例:

外部项目使用此目录布局:

libfoo.git                 <--- ExternalProject assumes this as source dir.
??? ...
??? libfoo                 <--- However, the actual source directory is this!
    ??? CMakeLists.txt
    ???  ...
Run Code Online (Sandbox Code Playgroud)

在依赖项目libfoo中配置如下:

ExternalProject_Add( libfoo 
    PREFIX            "${CMAKE_CURRENT_BINARY_DIR}/EP_libfoo"
    GIT_REPOSITORY    "<link to remote which hosts libfoo.git>" 
    GIT_TAG           "<some hash>"
)
Run Code Online (Sandbox Code Playgroud)

然后生成失败,并显示以下错误消息:

$ cmake -H/path/to/source-dir -B/path/to/build-dir
...
$ cmake --build /path/to/build-dir/ --target all
...
CMake Error: The source directory "/path/to/build-dir/EP_libfoo/src/libfoo" does not appear to contain CMakeLists.txt.
...
$
Run Code Online (Sandbox Code Playgroud)

因此,正如上面的目录布局所指出的,CMake认为外部项目的根是

/path/to/build-dir/EP_libfoo/src/libfoo
Run Code Online (Sandbox Code Playgroud)

事实上,它确实如此

/path/to/build-dir/EP_libfoo/src/libfoo/libfoo
Run Code Online (Sandbox Code Playgroud)

我试图解决这个问题:

  1. 不幸的是,修改参数 …

git build-automation build-process build cmake

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

如何在iOS中使用OpenCV框架的自定义路径查找CMake中的包

我在C++中使用CMake 3.0和我自己的iOS项目,它使用OpenCV作为依赖项.该项目生成一组由应用程序项目加载的库.

在我的CMake中,我尝试寻找OpenCV依赖,它自动在Windows和Linux中,但在Android和iOS中我必须设置正确的包.使用Android,使用以下代码设置$ {OpenCV_dir}/sdk/native/jni works属性:

SET(OpenCV_DIR NOT_FOUND CACHE PATH "Path to use OpenCV")
IF(OpenCV_DIR STREQUAL NOT_FOUND)
  FIND_PACKAGE( OpenCV PATHS ${OpenCV_DIR})
  MESSAGE(FATAL_ERROR "--***-- Warning: Install and configure path to prebuilt OpenCVConfig.cmake")
ENDIF()
Run Code Online (Sandbox Code Playgroud)

在iOS中,这不起作用.我通常在没有找到OpenCV的情况下创建项目Xcode项目,然后我拖放框架并使用自定义路径配置手动变量框架搜索路径,

/Users/Piperoman/Libraries/opencv2.4.9IOS
Run Code Online (Sandbox Code Playgroud)

但使用CMake代码却找不到它.

定位框架有什么问题?

c++ xcode opencv cmake ios

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