小编lea*_*vst的帖子

如何避免对GUI后面的数据使用全局?

我正在编写一个音频处理独立应用程序.我有一个AudioManager包含与引擎有关的对象(例如I/O设备管理,信号处理路由,运行状态).我正在编写一个GUI来控制AudioManager后台运行.目前,每个需要发送消息的组件都需要AudioManager指向它的指针.

当一个深度嵌套的对象需要一个指针时,这开始变得疯狂AudioManager,因为这意味着我需要将指针传递给不直接关心的GUI对象的构造函数AudioManager(只有一些子组件需要知道).

我可以做AudioManager一个单例来避免样板,但是来自类的信息流是双向的,所以这可能是一个坏主意.我也觉得有点可疑,把所有东西都包装成一个大班,但它让它更容易传递.有没有一个共同的模式来避免无意识的指针传递?

下面是一些伪代码,显示一些构造函数突出显示基本类型的问题.我已经标记了这个C++ 11,看看它是否提供了任何独特的解决方案.

MainWindow()
{
    am = new AudioManager();
    someWidget = new SomeWidget(am);
}

SomeWidget(AudioManager* am_) //SomeWidget does not really care about am
{
    someSubComponent = new SubThingy(am_);
}

SubThingy(AudioManager* am_) : subThingyLocalAudioManagerPtr(am_)
{
    subThingyLocalAudioManagerPtr->registerSomethingOrOther(this);
}
Run Code Online (Sandbox Code Playgroud)

c++ user-interface design-patterns c++11

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

迭代向量时自动与具体类型?

我正在阅读的这本书在迭代时给出了这个例子 vector

for (auto &e: v) {
  cout << e << endl;
}
Run Code Online (Sandbox Code Playgroud)

假设v被声明为vector<int> v,换句话说,我们知道这个集合中的元素类型是int.

auto以任何方式使用更好或更喜欢?

for (int &e: v) {
  cout << e << endl;
}
Run Code Online (Sandbox Code Playgroud)

为什么?

c++ int auto c++11

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

初学者用Python扩展C(特别是Numpy)

我正在研究一个实时音频处理动态链接库,其中我有一个浮点数据的二维C数组,代表音频缓冲区.一个维度是时间(样本),另一个维度是通道.我想把这个传递给一个python脚本作为DSP处理的numpy数组,然后我想把它传回给C,这样数据可以继续沿着C中的处理链传递.C++中的成员函数做了处理看起来像这样:

void myEffect::process (float** inputs, float** outputs, int buffersize)
{
    //Some processing stuff
}
Run Code Online (Sandbox Code Playgroud)

阵列输入输出具有相同的大小.整数buffersize输入输出数组中的列数.在python方面,我希望处理由一个如下所示的函数执行:

class myPyEffect
    ...
    ...
    def process(self,inBuff):
    #inBuff and outBuff should be numpy arrays
        outBuff = inBuff * self.whatever # some DSP stuff
        return outBuff
    ...
    ...
Run Code Online (Sandbox Code Playgroud)

现在,我的问题是,如何以最有效的方式将数据输入和输出C(避免不必要的内存复制等)?到目前为止,对于简单的参数更改,我一直在使用如下的C-API调用:

pValue = PyObject_CallMethod(pInstance, "setParameter", "(f)", value);
Run Code Online (Sandbox Code Playgroud)

我是否为我的numpy数组使用类似的东西,还是有更好的方法?谢谢阅读.

c c++ python api numpy

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

为什么函数参数名称在c ++声明中不重要?

声明中的函数参数名称(很可能存在于头文件中)似乎被编译器完全忽略.允许以下使用声明版本1或2进行编译的原因是什么?


履行

void A::doStuff(int numElements, float* data)
{
    //stuff
}
Run Code Online (Sandbox Code Playgroud)

声明 - 第1版

class A
{
public:
    void doStuff(int numElements, float* data);
}
Run Code Online (Sandbox Code Playgroud)

声明 - 第2版

class A
{
public:
    void doStuff(int, float*);
}
Run Code Online (Sandbox Code Playgroud)

c c++ compiler-construction standards

6
推荐指数
3
解决办法
447
查看次数

为什么要为地址运算符和引用声明符共享&符号(&)的使用?

在C++中,&符号(&)可用于获取左值,函数指示符或限定名称的地址..

int y;
int* p_to_y = &y;
Run Code Online (Sandbox Code Playgroud)

该角色在C++中作为参考声明符共享..

int y;
int& y_alias = y;
Run Code Online (Sandbox Code Playgroud)

在粗略了解C之后学习C++时,这种双重用法给我带来了很多困惑!我理解使用符号的上下文会有所不同,但鉴于引用和指针是不应混淆的重要概念,任何人都可以建议为什么&回收而不是使用新的替代符号?

c++ standards pointers reference ampersand

6
推荐指数
2
解决办法
1274
查看次数

查询std :: mutex的锁定状态

我有一种情况,我想做一些如下所示的事情,但似乎没有办法在不改变状态的情况下查询互斥锁.someFunctionCalledRepeatedlyFromAnotherThread()如果它被锁定,我不希望等待互斥锁释放.它必须在执行一些替代操作后立即返回.我猜这个遗漏是为了安全,因为锁可能在查询它和返回函数之间释放.在我的情况下,如果锁定在doSomeAlternativeAction()发生时被释放,则不会发生坏事.我在这种情况下的事实可能意味着我做错了什么,所以我应该如何改变我的设计呢?

class MyClass 
{
    std::mutex initMutex;
public:
    void someInitializationFunction()
    {
        std::lock_guard<std::mutex> lock(initMutex);
        // Do some work
    }

    void someFunctionCalledRepeatedlyFromAnotherThread()
    {
        if (initMutex.isLocked()) 
        {
            doSomeAlternativeAction();
            return;
        }
        // otherwise . . .
        std::lock_guard<std::mutex> lock(initMutex);
        // carry on with work as usual
    }
}
Run Code Online (Sandbox Code Playgroud)

c++ multithreading mutex c++11

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

使用google test和google mock进行浮点数组比较

我是 Google 测试产品的新手,并使用一些信号处理代码来尝试它们。我试图断言浮点数组在某些范围内等于,使用谷歌模拟,如这个问题的答案所建议的。我想知道为如下表达式添加一些容错能力的推荐方法。。。

EXPECT_THAT(  impulse, testing::ElementsAreArray( std::vector<float>({
    0, 0, 0, 1, 1, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0,
    0, 0, 0, 0, 0, 0, 0, 0
}) )  );
Run Code Online (Sandbox Code Playgroud)

我希望如果数组中的逐元素值彼此相差在 10 -8范围内,测试就能通过。

c++ arrays floating-point googletest googlemock

6
推荐指数
2
解决办法
5188
查看次数

复杂的钻石问题:C++虚拟继承

我有一个钻石问题,看起来像这样:

    __ A
  /    |\
 |  B  |  \
v|/v v\|v  \v
 B2   B3    C
  \v  /v   /
    B4    /
     \   /
       D
Run Code Online (Sandbox Code Playgroud)

我尝试了很多方法来制作最好的虚拟继承,以获得没有重复,但我找不到解决方案.A类包含一个位置.这是一个示例输出:

Call: A() position pointer is: 0x2203be8
Call: B()
Call: B2() position pointer is: 0x2203be8
Call: B3() position pointer is: 0x2203be8
Call: C() position pointer is: 0x2203a28
Call: B4() position pointer is: 0x2203be8
Call: D() position pointer is: 0x2203a28
Run Code Online (Sandbox Code Playgroud)

为什么D和C没有相同的位置指针?为什么这个A ::位置没有构造函数?我应该用什么虚拟继承来解决这个问题?谢谢.

编辑:

这是一个代码示例:

class A;
class B;
class B2 : public virtual B, public virtual A;
class …
Run Code Online (Sandbox Code Playgroud)

c++ multiple-inheritance virtual-inheritance

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

Jekyll自动目录

我已经建立了一个基于Apache Buildr网站的Jekyll代码的网站.Buildr网站根据textile格式文件中的标题自动为每个页面生成目录.

例如,您使用纺织品标记页面,就像这样标题..

h2(#why).  Why are we doing this?

BLah blah balh etc ..


h2(#something). Some other header

BLah blah balh etc ..
Run Code Online (Sandbox Code Playgroud)

然后在默认的HTML中,你有一些代码将内容传递给被调用的东西toc然后你把内容放到后面.例如 ...

<div id='content'>
 <h1 id='{{ page.title | downcase | replace(' ', '_') }}'>{{ page.title }}</h1>
  {{ content | toc }}
  {{ content }}
</div>
Run Code Online (Sandbox Code Playgroud)

在Apache站点上,他们获得了所需的结果(显示toc后跟内容).但是,在我的网站上,内容呈现两次.没有生成目录.

此外,如果我直接从github克隆Apache Buildr项目并jekyll --server在该doc项目的文件夹中运行,那么也不会生成目录.

我错过了什么?

html ruby tableofcontents jekyll web

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

如何让 Doxygen 显示钻石继承图

Doxygen 有一个非常巧妙的功能,它可以从代码生成继承图。但是,当使用来自具有公共基类的类的多重继承时,该图显示了两个单独的基类(即使我使用的是虚拟继承,如基类周围的虚线所示)

在此处输入图片说明

我怎样才能让 Doxygen 情节更像以下内容。. .

     D
    / \
   B   C
    \ /
     A
Run Code Online (Sandbox Code Playgroud)

而不是:(就像没有虚拟继承一样)

     D
   /   \
   B   C
   |   |
   A   A
Run Code Online (Sandbox Code Playgroud)

c++ doxygen multiple-inheritance virtual-inheritance diamond-problem

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