Пример использования шаблонов функций в классе ? - страница 2

 
o_O:

не могу подружить template с функциями классов

Шаблоны методов же используются только для создания перегрузок.

Иначе придется делать запрет на стандартный вид вызова  a.New()

 

ок. попроще синтаксис.


class
A {};
//--------------------------------------------------------------
class B
{
public:
 template <typename T> void New() { new T(); }
};
//--------------------------------------------------------------

template <typename T>
class
C
{
public
:
 void New() { new T(); }
};


void OnInit()
{
 B b;
 b.New<A>(); // 'New' - pointer to this function type is not supported yet

 C<A> c;
 c.New(); // OK
}


Ув. разработчики,

стоит ли ждать в ближайшем билде шаблонные методы или забить пока на них и решать задачу через другие способы?

 
Alexey Navoykov:
Сейчас все typename должны быть привязаны к аргументам функции, только так.  Поэтому придётся передавать фэйковый аргумент.

пробовал делать как New(T& foo),

результат тот же. ошибка

 
o_O:

пробовал делать как New(T& foo),

результат тот же. ошибка

class Obj {};

class List
{
public:
template <typename T>
void New( T* Tmp ) { Obj* obj=new T(); }
};

class Array
{
List a;
virtual void Add() { Obj* Tmp = NULL; a.New(Tmp); }
};
 
o_O:

ок. попроще синтаксис.

b.New<A>(); // Если это прокатит

b.New(); // На классический вызов придется ругаться
 

да да


class A {};

class B
{
public:
  template <typename T> void Add(T* foo) { new T(); /*создаем и делаем с объектом что необходимо*/ }
};

void OnInit()
{
  B b;
  A* a=NULL;
        
  b.New(a);
}


компилится и работает.

вот только в этом же смысла нет )

уж лучше и прозрачней делать

class A {};

class B
{
public:
  template <typename T> void Add(T* obj) { /*делаем с obj что необходимо*/ }
};

void OnInit()
{
  B b;
        
  b.Add(new A());
}
 
o_O:

уж лучше и прозрачней делать

Конкретно в случае Вашего примера, действительно, смысла нет. Но только и сам пример смысла не имеет. Думал, что Вы привели бессмысленный пример для демонстрации проблемы, как это делает A100. У него все примеры бессмысленные, когда рапортует об ошибках. Но зато простые и сразу видна ошибка.

Делать фейк в виде создания объекта - дорого и чревато утечками. Самый простой фейк - пустой указатель.

 
o_O:

ок. попроще синтаксис.


 b.New<A>(); // 'New' - pointer to this function type is not supported yet

Что-то я не помню, чтобы был разрешен подобный синтаксис.

В "острых" скобках указывается шаблон для объявления. А вот для вызова - будет подставляться реальный тип. Вот, как в последнем случае - Add(new А);

 
fxsaber:

Думал, что Вы привели бессмысленный пример для демонстрации проблемы, как это делает A100. У него все примеры бессмысленные, когда рапортует об ошибках. Но зато простые и сразу видна ошибка.

я думаю что в моём бессмысленном примере явно видна ошибка.  или нет?

остаётся ждать новый билд.

 
o_O:

или нет?

Не вижу ошибки. Разрешение такого синтаксиса FuncName<T>() автоматом ведет к запрещению использования FuncName().
Причина обращения: