^^
Alternately, you design the circuit to deliver one quantity primarily, and, using an error amplifier (an opamp), vary that quantity to control the other quantity.
Okay, that's pretty vague, but usually, you'll be delivering
current, and adjusting that current to control
voltage. It works the other way around, too. That's all.
The textbook switching supply operates this way, as does any linear or switching regulator that can be ganged in parallel (without problems with current sharing).
Practical example:
https://www.eevblog.com/forum/projects/building-a-simple-switching-circuit/msg1252706/The output
current is controlled, based on a reference input ISET, and sensed by the feedback IBATT. Battery current will never be higher than the maximum value of ISET.
To adjust output voltage (or, in this case, LED current actually), all we need to do is adjust ISET to get the voltage we want.
So, ISET is driven by the voltage error amp. ISET can never be higher than the maximum output voltage range of that amp (i.e., VCC).
Thus, even if the voltage error amp demands 100% full throttle, the current error amplifier simply sees -- oh, I need to set this current, yup, here we go. And that's it -- it's fully linear, always under control!
To make an adjustable current limit, all we need to do is limit the maximum ISET value. This can be done with a diode, or more precisely with an active rectifier circuit.
This applies to linear regulators where the pass device has a current output signal: LDOs (common emitter/source) are typical, but it is a good design method for followers (common collector/drain) too.
By the way, the tidbit about connecting supplies in parallel: current sources can be connected in parallel with no problems whatsoever; voltage sources cannot. If we build our power supply out of current source blocks, we can wire as many as we want, in parallel. They're all commanded by the same ISET, and we're done!
Tim