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

mai*_*mai 7 c++ rapidjson

我正在阅读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'的目的吗?

Max*_*hof 7

此代码允许其他人专门PutReserve针对他们自己的流类型.这使得其他形式的流可以选择对这里传递的信息采取行动 - 在这种情况下,count字符即将插入到流中.

你是正确的,存储库现在没有这样的专业化,因此单独从这个代码就不会发生任何事情.但是,如果这是作为用户扩展的选项(或库中的未来扩展),它仍然有目的.如果它仍然是非专业化的,编译器当然会看到该函数什么也不做,并完全优化它.


在实践中,想要将此库与其MyStream类型一起使用的用户将专门化这样的函数:

template<> void PutReserve(MyStream& stream, size_t count) {
  // ...user code
}
Run Code Online (Sandbox Code Playgroud)

但请注意,C++标准库将namespace std在未来的C++版本中消除所有形式的函数模板特化(in ),将functor类替换为"自定义点".请参阅此问题的基本原理.