Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
не могу подружить 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
}
Ув. разработчики,
стоит ли ждать в ближайшем билде шаблонные методы или забить пока на них и решать задачу через другие способы?
Сейчас все typename должны быть привязаны к аргументам функции, только так. Поэтому придётся передавать фэйковый аргумент.
пробовал делать как New(T& foo),
результат тот же. ошибка
пробовал делать как New(T& foo),
результат тот же. ошибка
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); }
};
ок. попроще синтаксис.
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 B
{
public:
template <typename T> void Add(T* obj) { /*делаем с obj что необходимо*/ }
};
void OnInit()
{
B b;
b.Add(new A());
}
уж лучше и прозрачней делать
Конкретно в случае Вашего примера, действительно, смысла нет. Но только и сам пример смысла не имеет. Думал, что Вы привели бессмысленный пример для демонстрации проблемы, как это делает A100. У него все примеры бессмысленные, когда рапортует об ошибках. Но зато простые и сразу видна ошибка.
Делать фейк в виде создания объекта - дорого и чревато утечками. Самый простой фейк - пустой указатель.
ок. попроще синтаксис.
b.New<A>(); // 'New' - pointer to this function type is not supported yet
Что-то я не помню, чтобы был разрешен подобный синтаксис.
В "острых" скобках указывается шаблон для объявления. А вот для вызова - будет подставляться реальный тип. Вот, как в последнем случае - Add(new А);
Думал, что Вы привели бессмысленный пример для демонстрации проблемы, как это делает A100. У него все примеры бессмысленные, когда рапортует об ошибках. Но зато простые и сразу видна ошибка.
я думаю что в моём бессмысленном примере явно видна ошибка. или нет?
остаётся ждать новый билд.
или нет?