小编mai*_*mai的帖子

这个功能的目的是什么,什么都没做?

我正在阅读RapidJSON的代码,我不明白这段代码:

//! Reserve n characters for writing to a stream.
template<typename Stream>
inline void PutReserve(Stream& stream, size_t count) {
    (void)stream;
    (void)count;
}

//! Put N copies of a character to a stream.
template<typename Stream, typename Ch>
inline void PutN(Stream& stream, Ch c, size_t n) {
    PutReserve(stream, n);// I think this function does nothing
    for (size_t i = 0; i < n; i++)
        PutUnsafe(stream, c);
}
Run Code Online (Sandbox Code Playgroud)

任何人都可以为我解释'PutReserve'的目的吗?

c++ rapidjson

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

如何在qt中递归添加源文件

如何添加qt项目文件中某个子目录中的所有文件。例如,我的源树是:

  • 源代码
    • 应用程序/
      • 富/
    • 用户界面/
    • 常见的/

现在我像这样添加所有文件

SOURCES +=  ./*.cpp \
            ./app/*.cpp \
            ./app/foo/*.cpp \
            ./ui/*.cpp \
            ./common/*.cpp
Run Code Online (Sandbox Code Playgroud)

有没有办法将src目录下的所有这些文件添加到SOURCES

c++ qt qmake

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

是否将指向类的指针强制转换为它的第一个成员非法?

我在我们的项目中看到一些奇怪的代码,如下所示。我测试它并得到正确的答案。但我认为这是非法的,谁能给我解释一下?

class Member
{
public:
    Member():
        a(0),b(1)
    {}

    int a;
    int b;
};

// contains `Member` as its first member
class Container
{
public:
    Container():
        c(0),d(0)
    {}

    Member getMemb(){return fooObject;}

    Member fooObject;
    int c;
    int d;
};
Run Code Online (Sandbox Code Playgroud)

以及我们如何使用它:

int main()
{
    auto ctain = new Container;
    auto meb = (Member *)ctain; // here! I think this is illegal

    cout << "a is " <<  meb->a << ", b is" << meb->b << endl;

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

但是我得到了正确的答案,a是0,b是1。这只是巧合吗?我还注意到如果fooObject不是第一个成员,我会得到错误的答案。

c++ pointers casting

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

有没有办法部分实例化一个c ++模板

我有一个类型的模板,模板中的一些代码对所有类型都无效,所以我想在需要时跳过它们.

struct T1
{
    int getData(){return 1;}
};

struct T2
{
    string getData(){return "string";}
};

struct T3
{
    // no getData()
};

template<typename T>
void printData(T param)
{
    cout << param.getData() << endl;
}

int main() {

    T1 t1;
    T2 t2;
    T3 t3;

    printData(t1);
    printData(t2);
    printData(t3);  // fails for T3 has no getData
}
Run Code Online (Sandbox Code Playgroud)

我想知道是否有这样的方式(伪代码):

template<typename T>
void printData(T param)
{
    if(T != T3) // compile time check, instance on this condition
    {
        cout << param.getData() << endl;
    }
} …
Run Code Online (Sandbox Code Playgroud)

c++ templates template-specialization c++11

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

C++中exit和kill的区别

我已经编写了一个信号处理程序来处理 a SIG,如果我收到太多信号,我想终止该进程。那么,以下哪个代码更好,或者我应该同时使用它们?

  1. exit(-1); // or some other exit code
  2. kill(getpid(), SIGKILL);

c++ exit sigkill

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

如何将指向char的指针强制转换为指向int的指针

我想将一个指向pcchar 的指针转换为指向piint的点

char *pc;
int *pi;
pi = (int*)pc                                    // compiler complaint about old-style cast
pi = static_cast<int *>(static_cast<void *>(pc)) // no complaint any more but too complex
Run Code Online (Sandbox Code Playgroud)

是否有任何更简单的方法来执行此演员并使编译器保持沉默?

c++ pointers casting

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