Притягивание области видимости

LevSch
LevSch

На текущий момент называю это scope pulling.

Далее пример, из которого, полагаю/надеюсь, всё будет очевидно.

В примере два варианта притягивания:

1. очевидный

2. указанный при описании агрумента функции

 

#include <string>
#include <iostream>
#include <vector>

namespace myspace {

  typedef std::vector<std::byte> ByteBuffer;

  enum class LogType {
    debug,
    info,
    fatal,
    error,
  };

  void log(LogType logType,const std::string& str)
  {
    (void)logType;
    // ...
    std::cout << str << std::endl;
  }

  namespace app_resources {
    // some generated ids (некоторые сгенерированные системой сборки идентификаторы)
    namespace pictures {
      static inline const int logo = 1;
      static inline const int monaLisa = 2;
    }
    namespace binaries {
      static inline const int defaultSqLite = 3;
    }
  }
  ByteBuffer readResource(int resourceId) // current solution (текущее решение)
  {
    (void)resourceId;
    // ...
    return ByteBuffer();
  }

  // ByteBuffer readResource(int resourceId pullscope app_resources); // proposed solution (предлагаемое решение)



  void sandbox()
  {
    // scope pulling (притягивание области видимости)
    {
      // obvious (очевидное)
      {
        log(LogType::debug,"Log1"); // current solution (текущее решение)
        // log(debug,"Log1"); // proposed solution (предлагаемое решение)
      }
      // declared (указанное)
      {
        readResource(app_resources::pictures::monaLisa); // current solution (текущее решение)
        // readResource(pictures::monaLisa); // proposed solution (предлагаемое решение)
      }
    }
  }

}


int main()
{
  myspace::sandbox();
  return 0;
}

0
рейтинг
2 комментария
yndx-antoshkka

Выглядит действительно хорошо, но есть очень большие проблемы. В данный момент выбор функции работает в обратную сторону:

1) формируется список доступных перегрузок из текущего namespace и всех namespace аргументов (ADL)

2) по типам аргументов выбирается лучшая перергрузка из списка из шага 1)

То есть ваше предложение несовместимо с текущей работаой C++.

Можно несколько упростить верхнюю схему, например если namespace явно указан, то ADL не происходит. Это решит проблему с формированием списка на шаге 1), но как выбрать лучшую перергрузку на шаге 2) - не очень понятно, т.к. типы аргементов неизвестны до тех пор, пока мы не выберем функцию.

yndx-antoshkka
LevSch

Упростить верхнюю схему это так

myspace::log(debug,"Log1");

вместо

log(debug,"Log1");

?

Тогда не вижу смысла. Так как в одном месте убрали буквы, а в другом добавили.

Если функция одна, то неоднозначности, ведь, не может быть. Если так, то я согласен на одну (для начала).

LevSch
Другие идеи
Группа создана, чтобы собирать предложения к стандарту C++, организовывать их внутренние обсуждения, помогать готовить их для отправки в комитет и защищать на общих собраниях в рабочей группе по С++ Международной организации по стандартизации (ISO).
Все предложения