про шаблоны вроде разобрался. раз прототип этой функции такой:
T QObject::findChild ( const QString & name = QString() ) const
то получается т.к это шаблонная функция не-шаблонного класса то тип Т означает приведение к типу найденного объекта так? а где можно посмотреть реализацию этой функции, а то не очень понятно где еще она в своем теле использует тип Т.
Странный вопрос, в исходниках Qt естественно
Файлы qobject.h, qobject.cpp.
и еще вопрос: Когда в не-шаблонном классе есть шаблонная функция, то для генерации компилятором необходимого ее варианта, тип нужно обязательно указывать сразу после названия шаблонной функции но до ее аргументов?
findChild<QObject*>("имя объекта")
Это всегда для таких функций или все зависит от ее реализации ?
Если функция принимает аргумент типа T, то компилятор сможет сам докумекать для какого типа нужно сгенерить реализацию. Например
C++ (Qt)
class A
{
public:
template<typename T>
void addValue(T a)
{
qDebug() << "Adding" << a;
}
};
Тут при явном вызове
C++ (Qt)
A a;
a.addValue(10); // 1
a.addValue(2.2); // 2
a.addValue<int>(0.1); // 3
сразу видно, что в пунктах 1 и 2 нужны реализации для int и double. Использование шаблона при вызове в таких случаях - опционально.
Можно явно вызывать определённую реализацию, как в п.3.
Когда компилятор не знает какая реализация нужна, ты
должен ему как бы намекнуть, что ты хочешь именно int. Так работают например QObject::findChild() и QVariant::value().
P.S. Читайте "C++ Templates: The Complete Guide. By David Vandevoorde, Nicolai M. Josuttis"