Parameters are either inputs to the function, outputs from the function, or both. Non-optional input parameters should usually be values or const references, while non-optional output and input/output parameters should usually be references (which cannot be null). Generally, use absl::optional to represent optional by-value inputs, and use a const pointer when the non-optional form would have used a reference. Use non-const pointers to represent optional outputs and optional input/output parameters.
обернуть в класс и не передавать вообще ничего. А ещё, мастера своего дела, смогут придумать 100500 способов решения задачи передачи данных для трансформации и возврата статуса. Вот тема для популяризационной статейки.
Честно говоря, я был уверен, что гугловый кодстайл требует все неконстантное передавать по указателю, а все константное по ссылке. Но нет. Они (зачем-то) различают optional и non-optional.