Я могу сохранить пользовательские атрибуты в HTML DOM как запись базы данных?

Выражение Alpha*a = dynamic_cast((Alpha*)p); сначала преобразует p в Alpha* с явным приведением стиля c . Затем полученный результат Alpha* пропускается через dynamic_cast. Использование dynamic_cast для указателя T* (указатель того же типа, к которому вы пытаетесь привести) всегда будет обеспечивать входной указатель. Его нельзя использовать для подтверждения правильности указателя. Из cppreference для dynamic_cast(expression):

Если тип expression точно new_type или менее квалифицированная по cv версия new_type, результатом является значение expression, с типом new_type.

blockquote>

В результате код всегда будет компилироваться и выполняться, а система типов не будет вас защищать. Но итоговое поведение не определено. В случае Beta*b = dynamic_cast((Beta*)p); вы говорите компилятору доверять, что p является Beta*, но это не так. Разыменование результирующего указателя является неопределенным поведением, и dynamic_cast не может защитить вас от этой ошибки.

Если вы попытаетесь удалить явное преобразование типов, вы получите ошибку компилятора. dynamic_cast требует указателя или ссылки на полный тип, а void не является полным типом. Вам нужно будет найти способ отследить фактический тип, указанный вам, и явно преобразовать p в этот тип указателя перед использованием dynamic_cast. Хотя в этот момент, если вы уже знаете тип, к которому нужно применить приведение, это может больше не понадобиться.

Попробуйте использовать общий базовый тип вместо этого или, возможно, используйте std::variant или std::any , если это необходимо.

10
задан spoulson 23 April 2009 в 00:34
поделиться

5 ответов

Взгляните на этот похожий вопрос, который я задал некоторое время назад: Могу ли я просто создать атрибуты для моих тегов HTML?

Лично мне не очень нравятся предложенные ответы на размещение всех ваших данных в атрибуте класса. Кажется, просто ... неправильно, ты знаешь? По моему опыту, хотя ваша страница не будет действительной, если вы создадите атрибуты, я все равно делаю это. Протестируйте его в 4 основных браузерах, и если это работает, кого это волнует?

Лучшее решение, о котором я могу подумать, - это решение, которое недопустимо сейчас , но будет в HTML5, так что это хорошо , Как предлагает ms2ger в этом другом вопросе, добавьте свои пользовательские атрибуты к data-

http://www.whatwg.org/specs/web-apps/current-work/multipage/dom. html # embedding-custom-non-visible-data

10
ответ дан 3 December 2019 в 23:51
поделиться

Возможно, вам нужны новые атрибуты данных HTML 5.

http://ejohn.org/blog/html-5-data-attributes/

http: //dev.w3.org/html5/spec/Overview.html#custom

1
ответ дан 3 December 2019 в 23:51
поделиться

This is relatively unknown but pretty dang useful: jQuery Metadata Plugin. It will let you store data within class names for retrieval. Its mostly used for the validation plugin but, really, can be adapted to any scenario.

Good luck with whatever you are working on.

1
ответ дан 3 December 2019 в 23:51
поделиться

В отсутствие какого-либо стандартного способа сделать это в HTML4 у меня возникнет соблазн создать скрытый элемент, соответствующий моему перетаскиваемому элементу, и сохранить в нем связанные данные. Назовите скрытый элемент относительно перетаскиваемого, чтобы вы могли легко найти информацию для него. Следующее расширение реализует это с помощью скрытого диапазона. Примечание: при тестировании я не мог воспроизвести ваши проблемы с перетаскиваемыми элементами - мне казалось, что data () работает нормально, но я не тестировал его с различными плагинами, только UI.Draggable.

Использование:

$('#draggableDiv').externalData('key','data');
var d = $('#draggableDiv').externalData('key');

jQuery.fn.externalData = function(key, data) {
    var value = this;
    this.each( function() {
        var id = this.id+'_external_data';
        var elem = jQuery('#'+id+':first');
        if (elem.size() == 0) {
            elem = $('<span style="display: none;" id="' + id + '"></span>"' );
            elem.appendTo(document.body);
        }
        if (data) {
            elem.data(key,data);
        }
        else {
            value = elem.data(key);
            return false;
        }
    });
    return value;
};
1
ответ дан 3 December 2019 в 23:51
поделиться

Have a look at http://www.persvr.org/

Persevere features a new native object storage engine called JavaScriptDB that provides high-end scalability and performance

http://ajaxian.com/archives/perseveres-javascriptdb-impressive-json-performance

0
ответ дан 3 December 2019 в 23:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: