Есть ли способ заставить автоматический вывод учитывать оператор <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.

Другие вопросы по тегам