小编lea*_*vst的帖子

如何以编程方式迭代所有CMake目标?

有没有办法从顶层获取CMake项目的所有目标CMakeLists.txt,即以编程方式迭代目标?

我想这样做的原因是为每个目标应用一些特定于XCode的设置..

if (CMAKE_GENERATOR MATCHES "Xcode")
    include(sanitize_xcode)
    sanitize_xcode(myTarget)
endif()
Run Code Online (Sandbox Code Playgroud)

仅供参考 - 消毒模块如下所示..

macro (set_xcode_property TARGET XCODE_PROPERTY XCODE_VALUE)
    set_property (TARGET ${TARGET} PROPERTY XCODE_ATTRIBUTE_${XCODE_PROPERTY} ${XCODE_VALUE})
endmacro (set_xcode_property)

macro (sanitize_xcode TARGET)
    set_xcode_property(${TARGET} GCC_GENERATE_DEBUGGING_SYMBOLS[variant=Debug] "YES")
    set_xcode_property(${TARGET} GCC_GENERATE_DEBUGGING_SYMBOLS[variant=MinSizeRel] "NO")
    set_xcode_property(${TARGET} GCC_GENERATE_DEBUGGING_SYMBOLS[variant=RelWithDebInfo] "YES")
    set_xcode_property(${TARGET} GCC_GENERATE_DEBUGGING_SYMBOLS[variant=Release] "NO")

    set_xcode_property(${TARGET} COPY_PHASE_STRIP[variant=Debug] "NO")
    set_xcode_property(${TARGET} COPY_PHASE_STRIP[variant=MinSizeRel] "YES")
    set_xcode_property(${TARGET} COPY_PHASE_STRIP[variant=RelWithDebInfo] "NO")
    set_xcode_property(${TARGET} COPY_PHASE_STRIP[variant=Release] "YES")

    set_xcode_property(${TARGET} GCC_OPTIMIZATION_LEVEL[variant=Debug] "0")
    set_xcode_property(${TARGET} GCC_OPTIMIZATION_LEVEL[variant=MinSizeRel] "s")
    set_xcode_property(${TARGET} GCC_OPTIMIZATION_LEVEL[variant=RelWithDebInfo] "3")
    set_xcode_property(${TARGET} GCC_OPTIMIZATION_LEVEL[variant=Release] "3")

    set_xcode_property(${TARGET} IPHONEOS_DEPLOYMENT_TARGET[variant=Debug] "7.0")
    set_xcode_property(${TARGET} IPHONEOS_DEPLOYMENT_TARGET[variant=MinSizeRel] "7.0")
    set_xcode_property(${TARGET} IPHONEOS_DEPLOYMENT_TARGET[variant=RelWithDebInfo] "7.0")
    set_xcode_property(${TARGET} IPHONEOS_DEPLOYMENT_TARGET[variant=Release] "7.0")
endmacro (sanitize_xcode)
Run Code Online (Sandbox Code Playgroud)

c c++ cmake target

13
推荐指数
2
解决办法
4892
查看次数

信号处理库的测试驱动开发

我使用音频操作,通常使用Matlab进行原型设计,使用C++进行实现.最近,我一直在阅读TDD.我查看了几个基本的例子,对这个范例非常热衷.

目前,我使用的是我认为全球"测试辅助"的方法.为此,我用C++编写信号处理块,然后创建一个可以与我的类接口的简单Matlab mex文件.我随后添加了功能,检查结果是否与我去的等效Matlab脚本相匹配.这项工作正常,但随着系统的发展,测试很快就会过时.更确切地说,我正在测试整个系统,而不仅仅是单位.

使用已建立的TDD框架会很好,我可以拥有一个测试套件,但我没有看到如何验证处理块的功能,而不需要像测试中的代码那样复杂的测试.如何在C++测试中生成参考信号以验证处理块而不将测试作为自我实现预言的一种形式?

如果有人有这方面的经验,或者可以提出一些我可以阅读的方法,那就太棒了.

language-agnostic audio tdd unit-testing signal-processing

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

通过串行连接进行双向C++通信

我正在尝试编写一个非常简单的C++应用程序来与Arduino进行通信.我想向Arduino发送一个它立即发回的角色.我从教程中获取的Arduino代码如下所示:

void setup()
{
    Serial.begin(9600);
}

void loop()
{
    //Have the Arduino wait to receive input
    while (Serial.available()==0);

    //Read the input
    char val = Serial.read();

    //Echo
    Serial.println(val);
}
Run Code Online (Sandbox Code Playgroud)

我可以使用GNU屏幕轻松地与Arduino进行通信,因此我知道基本通信一切正常:

$ screen /dev/tty.usbmodem641 9600

我看到的(破碎的)C++代码如下所示:

#include <fstream>
#include <iostream>
int main()
{
    std::cout << "Opening fstream" << std::endl;
    std::fstream file("/dev/tty.usbmodem641");
    std::cout << "Sending integer" << std::endl;
    file << 5 << std::endl; // endl does flush, which may be important
    std::cout << "Data Sent" << std::endl;
    std::cout << "Awaiting response" << std::endl; …
Run Code Online (Sandbox Code Playgroud)

c++ linux serial-port arduino

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

委托构造函数:委托构造函数的初始化程序必须单独出现

我有一对在C++ 03风格下运行良好的构造函数.其中一个构造函数调用超类(或基类)构造函数......

class Window : public Rectangle
{
public: 
    Window() : win(new RawWindow(*this))
    {
        refresh();  
    }

    Window(Rectangle _rect) : Rectangle(_rect), win(new RawWindow(*this))
    {
        refresh();
    }
...
Run Code Online (Sandbox Code Playgroud)

我试图弄清楚如何使用新的C++ 11委托ctor功能来解决这个问题.但是,以下代码给出以下编译器错误...

class Window : public Rectangle
{
public: 
    Window() : win(new RawWindow(*this))
    {
        refresh();  
    }

    Window(Rectangle _rect) : Rectangle(_rect), Window(){}
Run Code Online (Sandbox Code Playgroud)

"委托构造函数的初始化程序必须单独出现"......

有没有办法解决??

c++ constructor delegation superclass c++11

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

什么类型的自动用于容器?

我可以通过在C++中使用不同的容器来实现相同的输出.例如 ..

    std::array<int, 5> v = {1,2,3,4,5};
    for(auto i : v)
        std::cout << i << ", ";
Run Code Online (Sandbox Code Playgroud)

要么

    std::vector<int> v = {1,2,3,4,5};
Run Code Online (Sandbox Code Playgroud)

要么

    int v[] = {1,2,3,4,5};
Run Code Online (Sandbox Code Playgroud)

等等..

那么什么容器在auto这里使用?

    auto v = {1,2,3,4,5};
    for(auto i : v)
        std::cout << i << ", ";
Run Code Online (Sandbox Code Playgroud)

c++ types auto c++11

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

没有溢出的减法?

假设有两个整数(int x, y;).
x是消极的y = 0x80000000.

为什么不(x - y)溢出x + (-y)呢?
计算机不通过添加进行减法吗?

c precision integer overflow

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

使用带有lambda的decltype和std :: function

这有效......

auto x = 4;
typedef decltype(x) x_t;
x_t y = 5;
Run Code Online (Sandbox Code Playgroud)

......为什么不呢?

int j = 4;  
auto func = [&] (int i) { cout << "Hello: i=" << i << "  j=" << j << endl;};
typedef decltype(func) lambda_t;
lambda_t func2 = [&] (int i) { cout << "Bye: i=" << i << "  j=" << j << endl;};
Run Code Online (Sandbox Code Playgroud)

...我将如何lambda_t使用std :: function手动声明?

c++ lambda function decltype c++11

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

采用std :: vector或std :: array的模板函数

我有一个函数,目前接受2个可以包含任何普通旧数据的向量...

template <class T>
void addData(const vector<T>& yData, vector<T> xData)
{ .. }
Run Code Online (Sandbox Code Playgroud)

题:

  • 如果这些容器采用不同数量的模板参数,是否可以将其修改为两个std::array或两个std::vector,甚至是它们的组合?

c++ arrays templates vector c++11

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

防止静态初始化命令"fiasco",C++

有一次,我在读一个真棒C++ FAQ(这是真的好!)并阅读主题如何防止静态初始化命令"惨败".因此作者建议将静态变量包装到函数中,从而通过维护变量的创建顺序来防止"惨败".但在我看来,这是一个粗鲁的解决方法.所以我的问题是,是否有任何现代的,更多的模式导向的方法来防止这种"惨败",但将"静态东西"包装成函数???

c++ static word-wrap static-initialization static-order-fiasco

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

为什么"错误:使用unique_ptr将'sizeof'无效应用于不完整类型"通过添加空析构函数来修复?

我正在上课STFT.在标题中编译就好了:

class STFT; // pimpl off to prevent point name clash

class Whatever
{
private:
    STFT* stft;
Run Code Online (Sandbox Code Playgroud)

这在实施中:

#include "STFT.h"
Whatever::Whatever() : stft(new STFT()) {
// blah blah
}

Whatever::~Whatever() {
    delete stft; // pure evil
}
Run Code Online (Sandbox Code Playgroud)

但是,切换到std::unique_ptr<STFT> stft;标题中的原始指针,并删除析构函数,我得到

错误:'sizeof'无效应用于不完整类型'STFT'static_assert(sizeof(_Tp)> 0,"default_delete无法删除不完整类型");

但是,如果我只提供一个空的析构函数Whatever::~Whatever(){},那么它编译得很好.这让我完全难过.请填写我这个毫无意义的析构函数为我做的事情.

c++ pimpl-idiom unique-ptr c++11

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