0xd34df00d 12.11.2012 13:28 Azoth_primary

QSettings некоторые примитивные типы хранит внутри себя как строки (например, bool — true/false, числа, и т. п.). Поэтому при считывании bool'евского значения получается QVariant со строкой, на самом деле. В обычном C++-коде с этим проблем нет, ибо потом все равно произойдет QVariant::toBool(), и из строки "true" получится нормальный себе бул.
А вот если этот QVariant потом передать в QML, то там уже строка "true" сама в булево значение true не перейдет, поэтому приходится городить вот такие костыли:
QVariant val = ...;
if (val.type () == QVariant::String)
{
if (val.canConvert<bool> ())
val = val.toBool ();
else if (val.canConvert<double> ())
val = val.toDouble ();
else if (val.canConvert<int> ())
val = val.toInt ();
}

Recommended by:

@pooq: моча съела говно

1. k0st1x 12.11.2012 13:32 Work

а там же есть какой-то convert().
нельзя ли вызвать val.convert(val.type()) ?

2. 0xd34df00dk0st1x /1 12.11.2012 13:32 Azoth_primary

Неа. val.type() для этого случая String же.

3. k0st1x0xd34df00d /2 12.11.2012 13:32 Work

грустный qt

4. 0xd34df00dk0st1x /3 12.11.2012 13:33 Azoth_primary

Да. Какая-то недоутиная недотипизация.

Вообще вот всякие такие мелкие, но весьма геморройно обходимые просчеты в дизайне кутей очень печалят. Такое ощущение, что это песочница, шаг влево-вправо от типичных сценариев использования — все, глюки-лажа-говно.

5. kb0xd34df00d /4 12.11.2012 14:47

зависимые типы просто

6. 0xd34df00dkb /5 12.11.2012 14:48 Azoth_primary

Што. Причем тут?

7. kb0xd34df00d /6 12.11.2012 14:48 Azoth

слишком тонко пошутил?

8. 0xd34df00dkb /7 12.11.2012 14:49 Azoth_primary

Да.

9. kb0xd34df00d /8 12.11.2012 14:49 Azoth

ну qt на ровном месте сделали тип, зависящий от строкового значения какой-то переменной, похоже (мне) на зависимые типы.

10. kb0xd34df00d /8 12.11.2012 14:51 Azoth

оффтопик: как твой стиль чатика называется?

11. 0xd34df00dkb /10 12.11.2012 14:52 Azoth_primary

То ли Satin, то ли Renkoo, все время забываю, а в настройки лезть лень. Renkoo, кажется, да.

12. ulidtko 12.11.2012 16:40

статикопроблемы

13. 0xd34df00dulidtko /12 12.11.2012 16:42 Azoth_primary

Если бы.

14. ulidtko 12.11.2012 16:43

ну срсли, любая десериализация в статически типизированном языке будет происходить через древние (ещё с дельфовских времён) костыли вроде TVariant, QVariant, Typeable и тому подобные (эмулирующие позднее связывание). И хорошо ещё, если для них есть удобный синтаксический сахар, как dynamic в сисярпе.

15. ulidtko0xd34df00d /13 12.11.2012 16:44

они-они. Ты *не знаешь* во время компиляции какой тип данных будешь вычитывать из файла.

16. 0xd34df00dulidtko /15 12.11.2012 16:45 Azoth_primary

ADT в х-лях вполне норм с этим справляются.
Тут проблема не в том, что я не знаю, какой тип читаю, а в том, что read . write не равно id.

17. 0xd34df00dulidtko /14 12.11.2012 16:45 Azoth_primary

> древние
> ADT
А мне норм.

18. ulidtko0xd34df00d /16 12.11.2012 16:52

потому что ADT рантайм-полиморфны, лол. С известным оверхедом в виде метки рантайм-типа (Data-конструктора) и постоянной диспетчеризации по нему.

х-ль спасается гибким синтаксисом, конечно. http://hackage.haskell.org/packages/arch...
http://hackage.haskell.org/packages/arch...
вон, красота.

Но в любом достойном уважения языке, ящитаю, должна быть синтаксическая поддержка динамических типов, потому что без них в некоторых важных местах вроде /0 никуда.

О плюсах, как обычно, промолчим.

19. 0xd34df00dulidtko /18 12.11.2012 17:00 Azoth_primary

Еще раз, проблема в /0 не в том, что ADT или варианты или что, а что нормальный тип не сохраняется, и все приводится к строке.

20. ulidtko0xd34df00d /19 12.11.2012 17:21

> ... и все приводится к битам

нет, это не фундаментальная проблема. Как раз вот взаимодействие статических и райнтаймных меток для интерпретации пачек битов — действительно нихуевая проблема.

21. 0xd34df00dulidtko /20 12.11.2012 17:38 Azoth_primary

В чем проблема-то? У тебя просто ПИТОНОМЫШЛЕНИЕ.

Do you really want to delete ?