我目前正在阅读RapidJSON的代码,但我听不懂这段代码:
$clonedWorksheet = Worksheet::where('id', $id)->get()->load('records');
$worksheet = new Worksheet;
$worksheet->employee_id = $request->employee;
$worksheet->workday = $request->workday;
$worksheet->save();
foreach ($clonedWorksheet->records() as $clonedRecord) {
$record = new Record;
$record->from = $clonedRecord->from;
$record->to = $clonedRecord->to;
$record->estimated = $clonedRecord->estimated;
$record->place_id = $clonedRecord->place_id;
$record->worksheet_id = $worksheet->id;
$record->vehicle_id = $clonedRecord->vehicle_id;
$record->tool_id = $clonedRecord->tool_id;
$record->job_id = $clonedRecord->job_id;
$record->comment = $clonedRecord->comment;
$worksheet->records()->save($record);
}
谁能为我解释“ PutReserve”的目的?
答案 0 :(得分:7)
此代码允许其他人将PutReserve
专用于自己的流类型。这使其他形式的流可以选择对此处传递的信息采取行动-在这种情况下,count
个字符将被插入流中。
您是正确的,该存储库目前没有这样的专业化,因此仅此代码就不会发生任何事情。但是,如果打算将此作为用户扩展的选项(或库中将来的扩展),它仍然有其用途。而且,如果仍未对其进行专业化处理,则编译器当然会看到该函数不执行任何操作并完全对其进行了优化。
在实践中,想要以MyStream
类型使用此库的用户将对以下功能进行专门化:
template<> void PutReserve(MyStream& stream, size_t count) {
// ...user code
}
但是请注意,在将来的C ++版本中,C ++标准库将消除所有形式的功能模板专业化(在namespace std
中),将其替换为仿函数类作为“定制点”。原理请参见this question。