diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2013-11-27 14:27:27 -0500 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2013-11-27 14:27:27 -0500 |
commit | dc4a984cd63d6264ecbd24e414a097420367f684 (patch) | |
tree | 4102e0a2f540d30394431fc1dbb1f17f15633894 /libs | |
parent | 4d0caa6ddd60e78bea19ed9e23031868d16d44f0 (diff) |
move AudioBackend::_start() into protected, and expand a bit on documenting ::start() vs ::_start()
Diffstat (limited to 'libs')
-rw-r--r-- | libs/ardour/ardour/audio_backend.h | 34 | ||||
-rw-r--r-- | libs/backends/jack/jack_audiobackend.h | 4 |
2 files changed, 24 insertions, 14 deletions
diff --git a/libs/ardour/ardour/audio_backend.h b/libs/ardour/ardour/audio_backend.h index 26ced33885..17d7cd4010 100644 --- a/libs/ardour/ardour/audio_backend.h +++ b/libs/ardour/ardour/audio_backend.h @@ -282,17 +282,7 @@ class AudioBackend : public PortEngine { virtual std::string midi_option () const = 0; /* State Control */ - - /* non-virtual method to avoid possible overrides of default - * parameters. See Scott Meyers or other books on C++ to - * understand this pattern, or possibly just this: - * - * http://stackoverflow.com/questions/12139786/good-pratice-default-arguments-for-pure-virtual-method - */ - int start (bool for_latency_measurement=false) { - return _start (for_latency_measurement); - } - + /** Start using the device named in the most recent call * to set_device(), with the parameters set by various * the most recent calls to set_sample_rate() etc. etc. @@ -308,8 +298,24 @@ class AudioBackend : public PortEngine { * any existing systemic latency settings. * * Return zero if successful, negative values otherwise. - */ - virtual int _start (bool for_latency_measurement) = 0; + * + * + * + * + * Why is this non-virtual but ::_start() is virtual ? + * Virtual methods with default parameters create possible ambiguity + * because a derived class may implement the same method with a different + * type or value of default parameter. + * + * So we make this non-virtual method to avoid possible overrides of + * default parameters. See Scott Meyers or other books on C++ to understand + * this pattern, or possibly just this: + * + * http://stackoverflow.com/questions/12139786/good-pratice-default-arguments-for-pure-virtual-method + */ + int start (bool for_latency_measurement=false) { + return _start (for_latency_measurement); + } /** Stop using the device currently in use. * @@ -481,6 +487,8 @@ class AudioBackend : public PortEngine { protected: AudioEngine& engine; + + virtual int _start (bool for_latency_measurement) = 0; }; struct AudioBackendInfo { diff --git a/libs/backends/jack/jack_audiobackend.h b/libs/backends/jack/jack_audiobackend.h index 2c77e6112b..299bb1cefd 100644 --- a/libs/backends/jack/jack_audiobackend.h +++ b/libs/backends/jack/jack_audiobackend.h @@ -89,7 +89,6 @@ class JACKAudioBackend : public AudioBackend { std::string control_app_name () const; void launch_control_app (); - int _start (bool for_latency_measurement); int stop (); int freewheel (bool); @@ -272,6 +271,9 @@ class JACKAudioBackend : public AudioBackend { */ JACKSession* _session; + + protected: + int _start (bool for_latency_measurement); }; } // namespace |