EVOSandru6: Метод FindComponent возвращает указатель на базовый класс TComponent, от которого наследуются все "контролы". Приводите к нужному Вам типу. Например:
GavriKos: Николай Шепелев: а константный метода нужен для того, чтобы вызывать его у константного экземпляра Person. Да и другим программистам дать понять, что метод не меняет полей самого класса.
Григорий Каляшов: значит ставьте вопрос иначе, с подробностями. Ваша внутренняя логика приложения, кто/что должен/не должен делать мне не известна.
Когда должен создаваться towerFire? Кем? Если кем то извне, то можно передавать его как еще один аргумент FireParent* в конструкторы RocketTower и SimpleTower.
Вообще, делать атрибут в паблик секции - это а-та-та и фу-фу-фу.
EVOSandru6: Вы про какие скобки?
Вообще, можете написать один глобальный обработчик события OnKeyPress и назначить его всем компонентам, которые принимают фокус. Кстати, групбоксы и панели не из их числа. Поэтому у них и нет события KeyPress. Так вот, в нем передается TObject *Sender и System::WideChar &Key, по которым можно менять логику, в зависимости от того, на каком компоненте сработало событие -> через Sender это легко выяснить.
Тогда, можно всем компонентам назначить этот обработчик и при нажатии Esc, у всех будет одинаковое действие.
Могу только дополнить, что профилировать все таки нужно с таким кодом:
ISceneObject* tmp = *i;
if (tmp->Hit(...)).
И да, возможно 500мс это время вообще для всего вектора, а не для отдельного инкремента итератора.
sitev_ru: Я накидал несколько широко известных вариантов, каждый из которых имеет право на жизнь. Более того, в каждом варианте, необходимо продумать множество схем использования, в том числе и ту схему, которую Вы сейчас указали в комментарии. Реализация будет зависеть от деталей, которые известны только Вам. Поэтому выбирайте любой вариант, и продумывайте его до конца. За Вас это никто не сделает=)
Игнатов Александр: это маразм. Сам веду собеседования людей и никогда не прошу написать сортировку, рассказать про сложность алгоритма и т.п. Потому что в реальных проектах есть уже готовые функции, и достаточно иметь представление (понимать идею!!!) как работает сортировка разными способами. А написать наизусть...вот это маразм.
Гораздо эффективнее, спрашивать что делал человек на предыдущих местах. Почему он сделал, например, так, а не так в данном конкретном случае. Как он решил выстроить иерархию, к примеру и т.п. А спрашивать по Кнуту/Майерсу/Рихтеру/Страуструпу/Саттеру/Александреску/Продолжите сами - вот это маразм. Человек может все это знать на зубок, а в реальном проекте быть обузой - это из моей практики.
Спасибо за внимание.
Как я понял, listStruct - это простая обертка над callable object и вы хотите добавлять вообще любые функции с одним параметром(но любого типа) и без возвращаемого значения. Я конечно могу сказать про то, что можно сделать еще одну специализацию для методов класса -
template<template <typename, typename> class C, class ClassType, typename ParamType>
class QueueList< C<ClassType, ParamType> > {};
но этот вопрос слишком обширен, чтобы на него дать ответ тут. Могу только дать направление поиска, в том числе на хабре были статьи по этой теме - type erasure. Если пользуетесь C++11, то там есть std::function, std::bind, если нет, то есть boost, откуда в новый стандарт они и перекочевали.
Nipheris: не не не. "Фантастика" - декларировать все функции, вместо инклуда хэдеров. dendibakh: а что тут можно сделать, кроме как расхлебывать? Самое быстрое уже порекомендовали - безымянные неймспейсы втыкать.
Колбэк выполняется в контексте вызвавшего потока. Ваша задача, написать только тело этой функции. При чем тут синхронизация параметров? Параметры (jack_nframes_t nframes, void *arg) передает API, а не Вы. Если в теле используются общие(глобальные) данные нескольких потоков (не параметры функции), то синхронизация доступа к ним реализуется так же как и обычно - мьютексы/критические секции.
А по поводу: "нужно еще иногда переинициализировать объект фильтра" - это Вам документацию к API курить. Я с ней не знаком.