Using для статических данных

dix75
dix75

В качестве примера рассмотрим std::string::npos.

#define NPOS1 (std::string::npos)

class TestOutput {
public:
  static const auto npos2 = std::string::npos;

private:
    static bool empty(std::string const& value) noexcept {
        auto const& npos = std::string::npos;
        return (value.find('{') == std::string::npos || value.find('}') == npos)
            || (value.find('[') == NPOS1 || value.find(']') == npos2)
        ;
    }
};

В кладовой программистов  есть несколько вариантов решить данную задачу, очевидные(не все) приведены в примере.

Хотелось бы более простого решения.

class TestOutput {
public:
  using variable npos = std::string::npos;

private:
    static bool empty(std::string const& value) noexcept {
        return (value.find('{') == npos || value.find('}') == npos)
            || (value.find('[') == npos || value.find(']') == npos)
        ;
    }
};

Известно, что using используется для типов, using namespace - для пространств имен. Возможно, using variable будет приемлемо для данного использования.

P.S. Конечно решить данную задачу можно и подручными средствами, но это только пример, а в реальном коде ситуация в разы интереснее.

 

 
-7
рейтинг
1 комментарий
pavard
чем static constexpr auto npos = std::string::npos; не устроил?
pavard
Другие идеи
Группа создана, чтобы собирать предложения к стандарту C++, организовывать их внутренние обсуждения, помогать готовить их для отправки в комитет и защищать на общих собраниях в рабочей группе по С++ Международной организации по стандартизации (ISO).