googleapis / googleapis/google-cloud-cpp
Optimize initial `OptionSpan`
- Vorherrschende Sprache
- C++
- Sterne
- 659
- Forks
- 462
- Ø Merge
- 1 T. 2 Std.
- Gemergte PRs (30 T.)
- 89
Beschreibung
Every request in a `*Client` starts with something like:
```cc
google::cloud::internal::OptionsSpan span(std::move(options), options_);
```
The `options_` member variable never changes value. We should avoid the implicit copy from these options. If we can hold them as a `std::shared_ptr` then maybe `ImmutableOptions` can become a class that holds two `Options`, one by value (initialized via move) and a `std::shared_ptr<>` with the remaining values.
Something like:
```cc
class internal::OptionsImpl { // Similar to the Options class today
public:
template auto get() const { ... }
// has() and get() rolled into a single operation.
template std::pair find() const { ... }
};
class internal::ImmutableOptions {
public:
template auto get() const {
auto [has, value] = impl_.find();
if (has) return *value;
return fallback_.get();
}
// No set or unset member functions.
private:
OptionsImpl impl_;
std::shared_ptr fallback_;
};
class Options {
private:
OptionsImpl impl_;
};
```
Beitragsleitfaden
Bewertung
Dieses Issue wurde noch nicht bewertet.