Здравствуйте Sergey Kirillov, Вы писали:
SK> int *fdf = a.f<int>(j);
Подозреваю что ты это пытаешься собрать при помощи Visual C++ 6.0
Зря пытаешься. Не получится. Т.к. явному указанию типов в шаблонных
функциях VC отностися крайне болезненно и непредсказуемо.
Попытайся переписать это так чтобы компилятор сам мог вычислить
типа параметров в шаблонной функции. Например так:
template<class T> void f(int x, T **y);
int *fdf;
a.f<int>(j, &fdf);
SK>ЧТО ДЕЛАТЬ ?!!!
Так не делать. Или застрелиться. Или повеситься.
Или обругать гребаный мелкософт который вот уже пять лет не может
выпустить нормальный компайлер.
Здравствуйте All
Эта трабла недавно обсуждалась,
пришли к чуть более красивому решению: задающий тип параметр делать дефолтным:
template<class _T>result_t Func(/* нужные параметры */ , const _T* dummy = NULL);
Func<int>(...)
Func<float>(...)
вместо Func(..., int()), Func(..., float())
Всем привет.
ДАНО: Класс с функцией шаблоном внутри:
class A {
public :
template <class T> T * f(int pos) {...};
};
ВОПРОС: Как инcтанциировать функцию f c нужными мне параметрами шаблона?
ДОП.ИНФО: Для функций вне класса все делается очень просто:
template<class T> T * void f(int) {...};
void g(int j) {
int *fdf = f<int>(j);
}
однако в моем варианте
void g(int j) {
A a;
int *fdf = a.f<int>(j);
}
ЧТО ДЕЛАТЬ ?!!!
Здравствуйте Sergey Kirillov, Вы писали:
SK>А накакие сервиспаки это дело не правят ?
SK>Весь прикол в том что эта функция лежит в либе которую народ писал именно под MSVC.
Лежит да лежит себе. А вот пользовались ли они этой функцией? VC6 плохо понимает что такое
obj.Func<Type>();
точнее вообще ни понимаeт. И о чудо

в 7.0 код
class CBar
{
public:
template <class T> T Func()
{
return (T)getchar();
}
};
// ...
CBar bar;
bar.Func<int>();
работает.
SK>Полный 3.14здец.
Труден хлеб программиста

.
Здравствуйте Sergey Kirillov, Вы писали:
SK>Всем привет.
SK>ДАНО: Класс с функцией шаблоном внутри:
SK>class A {
SK>public :
SK> template <class T> T * f(int pos) {...};
SK>};
SK>ВОПРОС: Как инcтанциировать функцию f c нужными мне параметрами шаблона?
SK>ДОП.ИНФО: Для функций вне класса все делается очень просто:
SK>template<class T> T * void f(int) {...};
SK>void g(int j) {
SK> int *fdf = f<int>(j);
SK>}
SK>однако в моем варианте
SK>void g(int j) {
SK> A a;
SK> int *fdf = a.f<int>(j);
SK>}
SK>ЧТО ДЕЛАТЬ ?!!!
Может проще привести функции к виду:
class A
{
public:
template<class _T> _T* f(const _T t)
{
_T* pt= new(_T);//а то, что параметр t не нужен - нечего страшного
*pt=61;
return pt;
}
};
int main(int argc, char* argv[])
{
A a;
int* i;
i=a.f(int());
char* ch;
ch=a.f( char() );
return 0;
}
Или я чего-то не понимаю?