Всем привет.
ДАНО: Класс с функцией шаблоном внутри:
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> 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>ЧТО ДЕЛАТЬ ?!!!
Так не делать. Или застрелиться. Или повеситься.
Или обругать гребаный мелкософт который вот уже пять лет не может
выпустить нормальный компайлер.
Здравствуйте 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;
}
Или я чего-то не понимаю?
Здравствуйте All
Эта трабла недавно обсуждалась,
пришли к чуть более красивому решению: задающий тип параметр делать дефолтным:
template<class _T>result_t Func(/* нужные параметры */ , const _T* dummy = NULL);
Func<int>(...)
Func<float>(...)
вместо Func(..., int()), Func(..., float())