анонимное пространство имен

Создайте iframe при нажатии кнопки / ссылки и добавьте это в тело.

                  $('<iframe />')
                 .attr('src', url)
                 .attr('id','iframe_download_report')
                 .hide()
                 .appendTo('body'); 

Создайте iframe с задержкой и удалите его после загрузки.

                            var triggerDelay =   100;
                            var cleaningDelay =  20000;
                            var that = this;
                            setTimeout(function() {
                                var frame = $('<iframe style="width:1px; height:1px;" class="multi-download-frame"></iframe>');
                                frame.attr('src', url+"?"+ "Content-Disposition: attachment ; filename="+that.model.get('fileName'));
                                $(ev.target).after(frame);
                                setTimeout(function() {
                                    frame.remove();
                                }, cleaningDelay);
                            }, triggerDelay);
23
задан Merni 29 July 2010 в 14:42
поделиться

5 ответов

Во втором случае, когда вы не используете анонимное пространство имен, если какой-либо другой файл cpp объявляет extern int var; , он сможет использовать ваш Переменная.

Если вы используете анонимное пространство имен, то во время связывания другой файл cpp сгенерирует неопределенную ошибку ссылки.

29
ответ дан 29 November 2019 в 02:08
поделиться

В дополнение к причинам, указанным Николаем и другими, если вы не используете анонимное пространство имен, вы можете получить конфликты именования с другими глобальными данными. Если вы используете анонимное пространство имен, то вместо этого вы затеняете глобальные данные.

From cprogramming.com: "Внутри пространства имен вы можете быть уверены, что глобальные имена не будут конфликтовать, поскольку имена функций каждого пространства имен имеют приоритет над именами внешних функций"

.
2
ответ дан 29 November 2019 в 02:08
поделиться

Два пункта:

  1. любой, кто использует extern int var; может получить доступ к вашей переменной, если это не так в безымянном пространстве имен.
  2. если в другом файле у вас есть еще одна глобальная переменная int var , у вас будет несколько определений этой переменной.

Как указано в стандарте:

[...] все вхождения unique в единицы перевода заменяются на тот же идентификатор и этот идентификатор отличается от всех других идентификаторов вся программа.

1
ответ дан 29 November 2019 в 02:08
поделиться

Вторая версия определена в глобальном пространстве имен - другие файлы .cpp могут получить к ней доступ, объявив

extern int var;

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

3
ответ дан 29 November 2019 в 02:08
поделиться

Во втором случае другие файлы .cpp могут обращаться к переменной как:

extern int var;
var = 42;

, и компоновщик найдет ее. В первом случае имя переменной искажено без всякой причины :), поэтому это невозможно.

4
ответ дан 29 November 2019 в 02:08
поделиться
Другие вопросы по тегам:

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