Привет, ребята. Я работаю над системой обмена сообщениями, где есть 3 типа: потоки (память), касания (тип представления const), приемник (тип изменяемого представления). Теперь создать ответвление из потока очень просто, поскольку он может неявно преобразовывать поток в ответвление с помощью стандартного конструктора преобразования const ref. Но для раковин я не могу понять, как заставить его неявно конвертировать. Неявное преобразование - это то, что избавляет меня от многих головных болей (я не пытаюсь вникнуть в полное неявное преобразование - это злое обсуждение здесь), работая здесь с кодом кортежа и constexpr, можно ли было бы неявно создать приемник из потока, поддержание константности?
#include <tuple>
template<typename T>
struct Stream
{
};
template<typename T>
struct Tap
{
Tap(const Stream<T>& stream)
{}
};
template<typename T>
struct Sink
{
Sink(Stream<T>&)
{}
};
int main()
{
Stream<float> stream;
Tap<float> tap = stream;
//Sink<float> sink = stream;
std::tuple<Stream<float>, Stream<int>> streams;
std::tuple<Tap<float>, Tap<int>> taps = streams;
//std::tuple<Sink<float>, Sink<int>> sinks = streams;
}