我正在阅读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'的目的吗?
如何添加qt项目文件中某个子目录中的所有文件。例如,我的源树是:
现在我像这样添加所有文件
SOURCES += ./*.cpp \
./app/*.cpp \
./app/foo/*.cpp \
./ui/*.cpp \
./common/*.cpp
Run Code Online (Sandbox Code Playgroud)
有没有办法将src
目录下的所有这些文件添加到SOURCES
?
我在我们的项目中看到一些奇怪的代码,如下所示。我测试它并得到正确的答案。但我认为这是非法的,谁能给我解释一下?
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
不是第一个成员,我会得到错误的答案。
我有一个类型的模板,模板中的一些代码对所有类型都无效,所以我想在需要时跳过它们.
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) 我已经编写了一个信号处理程序来处理 a SIG
,如果我收到太多信号,我想终止该进程。那么,以下哪个代码更好,或者我应该同时使用它们?
exit(-1); // or some other exit code
kill(getpid(), SIGKILL);
我想将一个指向pc
char 的指针转换为指向pi
int的点
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)
是否有任何更简单的方法来执行此演员并使编译器保持沉默?