Есть ли способ заставить автоматический вывод учитывать оператор <some_type>() при назначении копии?
У меня есть переменная оболочка, которая сигнализирует об изменениях, когда базовая переменная изменяется через эту оболочку, поэтому другие объекты могут прослушивать изменения.
Он работает нормально (то есть я могу назначать, добавлять, вычитать, вызывать функции-члены для базового объекта (хотя они не могут сигнализировать об изменениях) и т. Д.), С одним небольшим отклонением: если я это сделаю
struct some_object_type
{
wrapper<int> some_wrapper;
}
int main()
{
some_object_type some_object;
auto value = some_object.some_wrapper;
}
value
здесь правильно выводится wrapper<int>
, Есть ли способ заставить эту конструкцию вести себя так, как будто some_object.some_wrapper
имеет тип int
, чтобы value
выводится как int
переменная?
1 ответ
У @TartanLlama есть правильное решение в его комментарии. Тем не менее, что бы вы хотели auto
вывести, если вместо этого вы указали auto const& value = ...
? В этом случае неявное преобразование не будет работать.
Я сталкивался с этой проблемой раньше, и лучшее решение, которое я мог придумать, было предоставить wrapper<T>::operator()
функция:
struct some_object_type
{
wrapper<int> some_wrapper;
}
int main()
{
some_object_type some_object;
auto value1 = some_object.some_wrapper; // deduces to wrapper<int>
auto value2 = some_object.some_wrapper(); //deduces to int
}
Возможно, это не то решение, на которое вы рассчитывали, но если вы не отказываетесь от автоматического вывода типов, вам лучше всего воспользоваться предложением @ TartanLlama.