Решение на http://www.phinesolutions.com/use-jquery-to-adjust-the-iframe-height.html работает отлично (использует jQuery):
я не знаю, что необходимо добавить 30 к длине... 1 работал на меня.
к вашему сведению : Если у Вас уже есть атрибут "высоты" на Вашем iFrame, это просто добавляет стиль = "высота: xxx". Это не могло бы быть тем, что Вы хотите.
В общем, C ++ нуждается в typename
из-за неудачного синтаксиса [*], который он наследует от C, что делает невозможным без нелокальной информации сказать - например - в A * B;
указывает, называет ли A
тип (в этом случае это объявление B
как указатель на него) или нет (в в этом случае это выражение умножения - вполне возможно, поскольку A
, насколько вы можете сказать без нелокальной информации, может быть экземпляром класса, который перегружает оператор *
для выполнения что-то странное; -).
В большинстве случаев у компилятора действительно есть нелокальная информация, необходимая для устранения неоднозначности (хотя неудачный синтаксис по-прежнему означает, что низкоуровневому синтаксическому анализатору требуется обратная связь от более высокого уровня, который хранит информацию таблицы символов ) ...но с шаблонами это не так (не в общем, хотя в этом конкретном случае может быть технически незаконным специализировать std :: list
так, чтобы его :: iterator
НЕ является именем типа; -).
[*] не только мое мнение, но и мнение Кена Томпсона и Роба Пайкса, в настоящее время моих коллег, которые заняты разработкой и реализацией нового языка программирования для внутреннего использования: этот новый язык программирования, хотя его синтаксис в основном Подобно C, НЕ повторяет ошибки проектирования синтаксиса C - это новый язык (например, в старом добром Паскале), синтаксиса достаточно, чтобы отличить идентификаторы, которые должны называть тип, от идентификаторов, которые не должны; -).
Компаратор rlbond не предотвращает вставку элементов, которые сравнивают равные. Очевидно, это трудно доказать в комментариях, учитывая ограничение на количество символов, потому что rlbond, похоже, думает, что std :: set гарантирует, что он никогда не будет содержать двух элементов с ! Compare (a, b) &&! Compare (b, a )
для своего компаратора. Однако компаратор rlbond не определяет строгий порядок и поэтому не является допустимым параметром для std :: set.
#include <set>
#include <iostream>
#include <iterator>
#include <algorithm>
struct BrokenOrder {
int order;
int equality;
public:
BrokenOrder(int o, int e) : order(o), equality(e) {}
bool operator<(const BrokenOrder &rhs) const {
return order < rhs.order;
}
bool operator==(const BrokenOrder &rhs) const {
return equality == rhs.equality;
}
};
std::ostream &operator<<(std::ostream &stream, const BrokenOrder &b) {
return stream << b.equality;
}
// rlbond's magic comparator
struct LessThan : public std::binary_function<BrokenOrder, BrokenOrder, bool> {
bool operator()(const BrokenOrder& lhs, const BrokenOrder& rhs) const
{
return !(lhs == rhs) && (lhs < rhs);
}
};
int main() {
std::set<BrokenOrder,LessThan> s;
for (int i = 0; i < 5; ++i) {
s.insert(BrokenOrder(i,i));
}
for (int i = 0; i < 5; ++i) {
s.insert(BrokenOrder(10-i,i));
}
std::copy(s.begin(), s.end(),
std::ostream_iterator<BrokenOrder>(std::cout, "\n"));
}
Вывод:
0
1
2
3
4
3
2
1
0
Дубликаты. Сбой магического компаратора. Различные элементы в наборе имеют одинаковое значение равенства
и, следовательно, сравнивают то же самое с operator ==
, потому что во время вставки набор никогда не сравнивал новый элемент с его дубликатом. Единственный дубликат, который был исключен, - 4, потому что два 4 '
Без typename std :: list
будет считаться статическим членом. typename
используется всякий раз, когда имя, зависящее от параметра шаблона, является типом.
Я думаю, что в целом вам нужны как имя типа / класс T в объявлении класса, так и определения функций, потому что вы можете определять полные / частичные спецификации шаблона для определений функций. Т.е. вы можете специализировать свою функцию удаления для целых чисел, строк и т.д. Итак, в этом случае вы говорите компилятору: «Это общий шаблон для любого типа», а затем вы можете определить ту же функцию, указанную только для целых чисел.
имя_типа необходимо в вашем объявлении 'it', потому что в противном случае компилятор не узнает, что это объявление типа, а не выражение.
Согласно эта страница ], «Используйте ключевое слово typename, если у вас есть полное имя, которое относится к типу и зависит от параметра шаблона.»