@ProCxx

Страница 1079 из 2477
Дед Пегас
12.07.2017
12:45:14
Прелюбопытнейшая дискуссия, товарищи плюсачи. https://www.reddit.com/r/cpp/comments/6mpbtr/why_are_stdtuples_constructors_all_noexceptfalse/

Constantine
12.07.2017
13:27:52
а можно class member function добавить модификатор "нельзя использовать this"? :)

как const и && только this=delete

Alexander
12.07.2017
13:29:21
а можно class member function добавить модификатор "нельзя использовать this"? :)
то есть чтобы внутри него нельзя было использовать this?

Google
Matwey
12.07.2017
13:29:38
static

Nik
12.07.2017
13:29:46
а зачем?

Alexander
12.07.2017
13:29:48
именно
станадртными средствами нет. Советую использовать clang-tidy + самописное правило

Berkus
12.07.2017
13:30:02
Constantine
12.07.2017
13:30:02
static
Вы можете самостоятельно понять, что это не то же самое. Это не вопрос в supapro :)

Alexander
12.07.2017
13:30:13
да, конечно, объяви ее static
да не это человеку надо

очевидно же

Constantine
12.07.2017
13:30:25
Я не могу делать виртуальную static функцию

Berkus
12.07.2017
13:30:36
да не это человеку надо
но в целом это именно то что нужно, static + ручной dispatch

Constantine
12.07.2017
13:30:57
Я могу сделать аналогичную вещь через RTTI и статическую функцию, да, но это наркомания

Berkus
12.07.2017
13:31:04
можно еще внутри лямбду исползовать которая this не капчурит

virtual void test() { []{ no this bitches }(); }

Google
Constantine
12.07.2017
13:31:38
это часть сигнатуры метода, как и const

этот метод в потомках не имеет права использовать this явно

Berkus
12.07.2017
13:32:25
*yawn* ну сделай ему сигнатуру сам

сигнатура это ж просто буковки

Constantine
12.07.2017
13:32:53
у меня сейчас это просто синтаксис генератора, не поддерживаемый плюсами

так что я уже сделал сам, да

по сути это виртуальный атрибут класса

такое чувство, что ты пишешь на сях, а не на плюсах)

потому что на самом деле в плюсах есть только одна действительно стоящая вещь - компилятор можно заставлять делать проверки

Berkus
12.07.2017
13:39:04
и эта вещь стоит всего остального, да

Constantine
12.07.2017
13:39:30
по крайней мере эта вещь, из-за которой C++ не безнадежен

Berkus
12.07.2017
13:39:48
ты мог бы писать на хаскеле и не иметь этих проблем, ныл бы в другой чатик

Konstantin
12.07.2017
13:40:17
а можно class member function добавить модификатор "нельзя использовать this"? :)
А можешь в двух словах объяснить, нафига тебе это?

Constantine
12.07.2017
13:40:35
А можешь в двух словах объяснить, нафига тебе это?
Мне нужно "виртуальную статическую функцию"

ты мог бы писать на хаскеле и не иметь этих проблем, ныл бы в другой чатик
я не специалист по хаскелю (не знаю его совсем), но у меня на него срабатывает эвристика "если он так хорош, почему на нем не пишут все" :)

Antony
12.07.2017
13:41:36
Мне нужно "виртуальную статическую функцию"
Чувствую, что пожалею об этом... А как вы собиаретесь это использовать в коде?

Vitalii
12.07.2017
13:42:15
Мне нужно "виртуальную статическую функцию"
Может, надо наследовать синглтон?

Constantine
12.07.2017
13:42:55
Чувствую, что пожалею об этом... А как вы собиаретесь это использовать в коде?
Например, у меня есть иерархия возможных "примитивных" типов генератора (не может быть реализована статикой), и для каждого типа определены его параметры

Чувствую, что пожалею об этом... А как вы собиаретесь это использовать в коде?
Грубо говоря, реализация на динамическом полиморфизме того, что на статическом полиморфизме будет class traits

Google
Antony
12.07.2017
13:45:33
а можете пример в виде кода написать? А то я всё еще не догоняю

Constantine
12.07.2017
13:49:04
struct ReflectionType { virtual ~ReflectionType() {}; virtual bool isMoveConstructible() /*this(delete)*/ = 0; }; std::unique_ptr<ReflectionType> ReflectionTypeByName(std::string name) { //фабрика } template <typename Type> struct KnownCppType: ReflectionType { virtual bool isMoveConstructible() /*this(delete)*/ { return std::is_move_constructible<Type>::value; } };

Berkus
12.07.2017
13:51:19
никак не объясняет зачем тут this=delete

Constantine
12.07.2017
13:53:26
никак не объясняет зачем тут this=delete
затем, что на самом деле следующая реализация семантически ошибочна: struct HackedReflectionType: ReflectionType { bool isMoveConstructible_; virtual bool isMoveConstructible() { return isMoveConstructible_; } };

Konstantin
12.07.2017
13:59:35
А зачем const писать? :)
Смотря на что

Constantine
12.07.2017
14:00:21
Смотря на что
Можно вообще не писать никогда. Кажется, утверждалось, что const не учитывается компилятором, кроме как для проверки того, что кто-то не стреляет себе в ногу

Александр
12.07.2017
14:02:12
Всем привет, кто-нибудь сталкивался с раскраской отдельных элементов SVG-файла путём клика на области этих элементов? Типа, определять по координатам точки, какой это тэг файла. Если что, пишется это на виджетах Qt

Antony
12.07.2017
14:03:20
struct ReflectionType { virtual ~ReflectionType() {}; virtual bool isMoveConstructible() /*this(delete)*/ = 0; }; std::unique_ptr<ReflectionType> ReflectionTypeByName(std::string name) { //фабрика } template <typename Type> struct KnownCppType: ReflectionType { virtual bool isMoveConstructible() /*this(delete)*/ { return std::is_move_constructible<Type>::value; } };
Можно вот так попробовать (тут страшненько написано, нужно причесать): ` struct ReflectionType { private: virtual ~ReflectionType() {}; friend class ReflectionTypeImpl; public: virtual bool isMoveConstructible() const noexcept = 0; }; template <class Impl> struct ReflectionTypeImpl : ReflectionType{ bool isMoveConstructible() const noexcept override { return Impl::get_something(); } }; std::unique_ptr<ReflectionType> ReflectionTypeByName(std::string name) { //фабрика } template <typename Type> struct KnownCppType: ReflectionTypeImpl<KnownCppType<Type> > { static bool get_something() noexcept { return std::is_move_constructible<Type>::value; } };

Berkus
12.07.2017
14:03:38
Александр
12.07.2017
14:05:01
хм, интересная идея, спасибо!

Constantine
12.07.2017
14:17:19
Можно вот так попробовать (тут страшненько написано, нужно причесать): ` struct ReflectionType { private: virtual ~ReflectionType() {}; friend class ReflectionTypeImpl; public: virtual bool isMoveConstructible() const noexcept = 0; }; template <class Impl> struct ReflectionTypeImpl : ReflectionType{ bool isMoveConstructible() const noexcept override { return Impl::get_something(); } }; std::unique_ptr<ReflectionType> ReflectionTypeByName(std::string name) { //фабрика } template <typename Type> struct KnownCppType: ReflectionTypeImpl<KnownCppType<Type> > { static bool get_something() noexcept { return std::is_move_constructible<Type>::value; } };
С практической точки зрения у меня есть генератор, который просто сгенерирует в этом месте вызов статической функции и форвард аргументов. С теоретической точки зрения мне не очень нравится данное решение, поскольку совершенно не очевидно, как там поддерживать наследование (очень хочется делать, чтобы фактический ReflectionType для Derived наследовал фактический ReflectionType для Base).

Дед Пегас
12.07.2017
15:09:56
https://vittorioromeo.info/index/blog/zeroalloc_continuations_p1.html

Anatoly
12.07.2017
15:31:11
@antoshkka а это валидное объявление другом friend class ReflectionTypeImpl; при условии, что ReflectionTypeImpl template?

вроде, должно быть template<typename T> friend class ReflectionTypeImpl;

Stanislav
12.07.2017
15:51:00
@zamazan4ik а ты смотрю активно пишешьв пропозалах)

Alexander
12.07.2017
15:52:23
@zamazan4ik а ты смотрю активно пишешьв пропозалах)
ну... я не сказал бы, что это аквтино ? Просто я стараюсь отписываться там, где мне интересно и есть, что сказать. Тем более, что в некоторых вещах я реально чем-то могу помочь

Google
Admin
ERROR: S client not available

Alexander
12.07.2017
15:53:31
? да за сегодня уже 3-4 письмо от тебя вижу
что ж поделать - пока на работе есть минут 5-10 во время билда, почему бы не ответить?)

/stat@combot

Combot
12.07.2017
15:54:22
combot.org/chat/-1001031904034

Alexander
12.07.2017
15:54:43
как випдишь, я и здесь флудить успеваю неплохо

Владислав
12.07.2017
15:55:51
самый активный участник чата за полгода

Stanislav
12.07.2017
15:58:55
я вроде один раз написал, меня не поняли слегка я подзабил

Stanislav
12.07.2017
15:59:49
да я читаю зато) там про extended классы было

как это, в шарпах есть такое

Владислав
12.07.2017
16:00:13
а кто стандарт читал? Чтобы от корки до корки.

Дед Пегас
12.07.2017
16:00:38
А кто не читал?

Владислав
12.07.2017
16:01:03


я не читал

Alexander
12.07.2017
16:01:41
как это, в шарпах есть такое
Расширение класса?

Такую штуку я очень жду?

На с++ писать не бросим)

Stanislav
12.07.2017
16:04:19
Google
Stanislav
12.07.2017
16:04:43
во в шарпах так и называются C# extension methods

Такую штуку я очень жду?
дак не ясно как ее готовить слегка

учитывая юниты трансляции всякие

Alexander
12.07.2017
16:07:40
Расширения в модуль, потом юзаешь модуль

Constantine
12.07.2017
16:08:23
А что там технически такое расширение?

Stanislav
12.07.2017
16:08:32
Расширения в модуль, потом юзаешь модуль
а если в .спп файле это делаешь? какие нахер модули?

А что там технически такое расширение?
есть класс, мб базовый типа std::string ты добавляешь в него свой метод

удобна

Дед Пегас
12.07.2017
16:09:17
Миксины шоле?

Constantine
12.07.2017
16:09:19
ну это может быть реализовано одним костылем, правда, по-хорошему нужно иметь модуль, который их все знает

Страница 1079 из 2477