Size: a a a

cxx.Дискуссионная

2020 April 11

KK

Konstantin Kozyrev in cxx.Дискуссионная
namespace beast = boost::beast;
источник

KK

Konstantin Kozyrev in cxx.Дискуссионная
А ЧЁ, ТАК МОЖНО БЫЛО?!
источник

O

Ofee in cxx.Дискуссионная
Ofee
А я, кажется, с помощью enum и нескольких врапперов переизобрёл ссылки на константные статические строки...
//! User-defined enum
enum class test {
   first, second, third
};

//! We specialize some text
//! property for our enum
template<> constexpr inline auto vtp::representation<test::first> = "first value";
template<> constexpr inline auto vtp::representation<test::second> = "second value";

//! We declare simple text getter
template<test value> constexpr inline
auto text_value = vtp::static_converter<value>{};


//! Some method which accepts std::string
void foo(std::string s) {
   std::cout << s << std::endl;
}

//! Some method which accepts light weight wrapper:
void bar(vtp::runtime_converter<test> rcv) {
   foo(rcv);
}

int main() {
 auto x = text_value<test::first>;
 auto y = text_value<test::second>;
 foo(x); // first value
 bar(y); // second value

 // Error! There isn't such specialization:
 // auto z = text_value<test::third>;
}


До сих пор не понимаю, чем это было хуже, чем
inline std::string first = "first value";
inline std::string second = "second value";
источник

O

Ofee in cxx.Дискуссионная
Danya
Выглядит крипово
Выглядит нормально, если не думать так глубоко... Ведь нормальный же интерфейс, только зачем?
источник

O

Ofee in cxx.Дискуссионная
Хотя... я могу работать с перечислениями и лишь некоторым из них давать строковые представления, а то и больше одного... Не знаю, как я до этого дошёл
источник

O

Ofee in cxx.Дискуссионная
Собственно, вот все фичи:
источник

O

Ofee in cxx.Дискуссионная
Переслано от Ofee
Бонусы:
* Перечисление может содержать множество значений, не всем из которых нужно строковое представление
* Можно хранить несколько строковых представлений на одно значение перечисления
* Автоматическая валидация на предмет того, что мы специализировали строковое представление
* В этом никто не разберётся и меня не смогут уволить
источник

O

Ofee in cxx.Дискуссионная
Переслано от Ofee
Простой и понятный код, особенно момент со специализацией
источник

D

Danya in cxx.Дискуссионная
Ofee
//! User-defined enum
enum class test {
   first, second, third
};

//! We specialize some text
//! property for our enum
template<> constexpr inline auto vtp::representation<test::first> = "first value";
template<> constexpr inline auto vtp::representation<test::second> = "second value";

//! We declare simple text getter
template<test value> constexpr inline
auto text_value = vtp::static_converter<value>{};


//! Some method which accepts std::string
void foo(std::string s) {
   std::cout << s << std::endl;
}

//! Some method which accepts light weight wrapper:
void bar(vtp::runtime_converter<test> rcv) {
   foo(rcv);
}

int main() {
 auto x = text_value<test::first>;
 auto y = text_value<test::second>;
 foo(x); // first value
 bar(y); // second value

 // Error! There isn't such specialization:
 // auto z = text_value<test::third>;
}


До сих пор не понимаю, чем это было хуже, чем
inline std::string first = "first value";
inline std::string second = "second value";
Constexpr функциям не нужен инлайн
источник

D

Danya in cxx.Дискуссионная
Они по умолчанию такие
источник

O

Ofee in cxx.Дискуссионная
Danya
Constexpr функциям не нужен инлайн
Где в моём коде constexpr-функции?
источник

D

Danya in cxx.Дискуссионная
А бля
источник

D

Danya in cxx.Дискуссионная
Это поле класса что ли
источник

o

osm1um in cxx.Дискуссионная
Всем привет
источник

D

Danya in cxx.Дискуссионная
Ужасно
источник

o

osm1um in cxx.Дискуссионная
О чём вы?
источник

O

Ofee in cxx.Дискуссионная
Danya
Это поле класса что ли
Шаблонная переменная
источник

D

Danya in cxx.Дискуссионная
Ofee
//! User-defined enum
enum class test {
   first, second, third
};

//! We specialize some text
//! property for our enum
template<> constexpr inline auto vtp::representation<test::first> = "first value";
template<> constexpr inline auto vtp::representation<test::second> = "second value";

//! We declare simple text getter
template<test value> constexpr inline
auto text_value = vtp::static_converter<value>{};


//! Some method which accepts std::string
void foo(std::string s) {
   std::cout << s << std::endl;
}

//! Some method which accepts light weight wrapper:
void bar(vtp::runtime_converter<test> rcv) {
   foo(rcv);
}

int main() {
 auto x = text_value<test::first>;
 auto y = text_value<test::second>;
 foo(x); // first value
 bar(y); // second value

 // Error! There isn't such specialization:
 // auto z = text_value<test::third>;
}


До сих пор не понимаю, чем это было хуже, чем
inline std::string first = "first value";
inline std::string second = "second value";
Это жесть какая-то короче
источник

D

Danya in cxx.Дискуссионная
Я нихера не понял и пошел спать
источник

o

osm1um in cxx.Дискуссионная
Да, да, пошёл я на**р...
источник