小编lea*_*vst的帖子

是否有一个简洁的方法将文本输出到调试窗格?

我想在调试时显示一些日志消息.一种选择是使用非常丑陋的

#ifdef DEBUG
    std::cout << "I'm in debug mode!\n";
#endif
Run Code Online (Sandbox Code Playgroud)

JUCE库中,有一个很好的宏可以将文本输出到调试窗格

DBG("I'm in debug mode!")
Run Code Online (Sandbox Code Playgroud)

juce解决方案还允许您做出如下所示的整洁的东西

int x = 4;
DBG(String("x=") + String(x))
Run Code Online (Sandbox Code Playgroud)

我想知道std ::或boost ::中是否存在类似的整齐方法

c++ debugging macros console

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

在范围锁定之前检查可选的互斥锁

我有一个构造函数,可以选择允许用户将一个ponter传递给Boost互斥锁.如果未提供互斥锁,则将成员指针pMyMutex设置为NULL.这使用户可以根据需要选择应用某些线程安全性.但是,scoped_lock由于显而易见的原因,我无法使用这种检查:)

if (pMyMutex != NULL)
    const boost::mutex::scoped_lock l(*pMyMutex);

//The lock is already out of scope
processStuff(x, y, z);
Run Code Online (Sandbox Code Playgroud)

任何人都可以建议一个简洁的解决方案来满足这样的要求吗?

c++ multithreading mutex critical-section scoped-lock

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

在显式构造函数中键入推断

我正在使用以下代码来处理某些类型的安全提示,该代码在相关单元之间进行转换...

#include <cmath>
#include <limits>

template <typename T>
class Pascal
{

private:
    T val;

public:
    explicit Pascal(const T val_)
    {
        val = val_;
    }

    operator T() const
    {
        return val;
    }

};

template <typename T>
class dbSPL {
private:
    T val;

public:
    explicit dbSPL(const Pascal<T> p)
    {
        auto infProtect = std::numeric_limits<T>::min();
        val = 20.0 * std::log10( infProtect + p / 20e-6 );
    }


    operator T() const
    {
        return val;
    }


};
Run Code Online (Sandbox Code Playgroud)

我想知道是否可以从构造函数参数类型推断模板类型,而不是显式声明模板参数.例如auto p = Pascal(0.5),而不是打字auto p = …

c++ templates constructor c++11

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

函数在公共API中采用void *并在后台输入*的类型冲突

我正在尝试建立一个第三方库,该库具有在公共标头中定义的功能,例如

void reset(void* instance);
Run Code Online (Sandbox Code Playgroud)

并在执行中

void reset(instance_type* instance) {
   ...
}
Run Code Online (Sandbox Code Playgroud)

而且我遇到了一个冲突的类型编译器错误。现在,这对我来说似乎很明显。作者使用的是MSVC,而我使用的是设置为C99标准的gcc,也许这就是为什么它可以在作者的计算机上使用的原因?在不希望instance_type通过公共接口公开的约束下,我可以做些什么最小的修改?

c types function

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

简单的提升智能指针语法问题

使用任何一个boost::scoped_ptrboost::shared_ptr我得到错误

1> *\algomanager.cpp(28):错误C2064:term不计算为带1个参数的函数

我有这样的代码...

class X{
  boost::shared_ptr<cPreFilterProcess> preProcess;
public:
  X(){
    preProcess(new cPreFilterProcess(pars));
  }
};
Run Code Online (Sandbox Code Playgroud)

我错过了什么?谢谢.

c++ boost smart-pointers shared-ptr

0
推荐指数
1
解决办法
682
查看次数

为什么'+'运算符的行为方式与Matlab字符串相同?

在Matlab中,以下语句给出了数字输出..

>> 'abc' + 'def'

ans =

   197   199   201
Run Code Online (Sandbox Code Playgroud)

在C++中,输出如下

std::string("abc") + std::string("def") 
Run Code Online (Sandbox Code Playgroud)

...会给予可能更有用的......

abcdef
Run Code Online (Sandbox Code Playgroud)

多一点探索给..

>> a = 'abc'

a =

abc

>> whos
  Name      Size            Bytes  Class    Attributes

  a         1x3                 6  char   
Run Code Online (Sandbox Code Playgroud)

这表明我的变量a是一种char类型.但是,我们知道这不等同于C类型的char,因为它是一个知道其大小尺寸等的对象.

因此,我的问题是:这个数字输出有什么用?

...导致

为什么他们会把它设计得像那样?

string matlab operator-overloading

0
推荐指数
1
解决办法
488
查看次数

无法将1D阵列转换为2D阵列

编辑:删除C++位以避免混淆

我有一个像这样的数组

int numSamples = 16;
float *lData  = (float*)calloc(numSamples, sizeof(float));
Run Code Online (Sandbox Code Playgroud)

...我希望将此数据传递给具有此类定义的函数...

void processSampleBlock (const float ** inputChannelData,
                         int    numInputChannels,
                         ...)
Run Code Online (Sandbox Code Playgroud)

如您所见,此函数接受可以具有多个通道的2D阵列.我的数据只是一个通道(1D),但我可以通过像这样的演员来获得编译好的代码..

processSampleBlock ((const float**)(lData),
                            1,
                            ...)
Run Code Online (Sandbox Code Playgroud)

但是,我在运行时遇到错误的访问错误,然后功能块中的代码尝试取消引用该函数内的数据..

for (int nn=0; nn< numSamples; ++nn)
{
    float x = inputChannelData[0][nn]; //--> Computer says no
}
Run Code Online (Sandbox Code Playgroud)

我对C风格的多维数组没用,我可能在这里犯了一个基本错误.任何帮助都会很棒!谢谢

c arrays multidimensional-array

0
推荐指数
1
解决办法
479
查看次数

在C++ 11中,未排序的修改警告将成为未使用结果的警告

我正在尝试使用过滤器库,并从以下代码段获取未经测试的修改警告.

while (--numSamples >= 0)
    *dest++ = state.process(*dest, *this);
Run Code Online (Sandbox Code Playgroud)

这样就可以在SO上查看类似的问题,因为dest正在修改并在同一命令中访问.所以,我想预期的功能如下...

while (--numSamples >= 0) {
    *dest = state.process(*dest, *this);
    *dest++;
}
Run Code Online (Sandbox Code Playgroud)

但是,这为后增量提供了一个新的,更好奇的警告"警告:表达结果未使用".为什么这个新警告,我应该如何正确解决这个问题?

c++ sequence c++11

0
推荐指数
1
解决办法
67
查看次数

C++增加,用"?:"减少数字

我知道如何在C++中使用"?:"创建一个首先增加数字的代码,当它达到100时,它会减少,当它达到0时,它会再次增加.

好的澄清一下:起始编号:1,应写入1 - 100,然后写入100,100,99,98,97至0,依此类推.

#include <iostream>
using namespace std;

int main () {
int number = 1;
string sign = "plus";
for (int i = 700; i > 0; i--) {
    (number==0?sign="plus":(number==100?sign="minus":(sign=="plus"?number++:number--)));
    cout << number;
    usleep(3000);
}
}
Run Code Online (Sandbox Code Playgroud)

好!这当然不容易.(上面的代码不起作用,给出错误:无法将char转换为int)

问题:它不起作用,如何使其工作?

这不是作业..

c++ ternary-operator

-1
推荐指数
2
解决办法
7355
查看次数