Список аргументов шаблона метода класса - PullRequest
0 голосов
/ 27 марта 2012

В моем интерфейсе объявлен следующий метод шаблона:

class IObjectFactory
{
public:
    virtual ~IObjectFactory() { }

    virtual int32_t Init() = 0;
    virtual bool Destroy() = 0;
    virtual bool Start() = 0;
    virtual bool Stop() = 0;
    virtual bool isRunning() = 0;
    virtual void Tick() = 0;

    template <class T>
    Object<T> CreateObject(T);
};

Хотя я не уверен, как выглядит вызов.Я думал, что следующего будет достаточно, где mObjFactory - реализация ранее упомянутого виртуального класса;

inline void AllocateWithMemPoolAux() {  mObjFactory->CreateObject<TestClass1>(); }

Я получаю ошибку: "Ни один экземпляр шаблона функции не соответствует списку аргументов" Как выглядит правильный вызов функции?

(также - в качестве sidenote, можно ли объявлять шаблонный метод в интерфейсе и требовать, чтобы пользователь реализовал его?, Поскольку вы не можете объявить его виртуальным)

Спасибо

Ответы [ 4 ]

1 голос
/ 27 марта 2012

Примечание:

template <class T>
Object<T> CreateObject(T);

Вы имели в виду

template <class T>
Object<T> CreateObject();

0 голосов
/ 27 марта 2012

Вы вызвали этот метод без аргумента:

mObjFactory->CreateObject<TestClass1>();

вам нужно передать объект типа TestClass1:

inline void AllocateWithMemPoolAux() {  mObjFactory->CreateObject<TestClass1>(TestClass1()); }
0 голосов
/ 27 марта 2012

шаблонная функция

template <class T>
Object<T> CreateObject(T);

принимает один аргумент типа T.Вы назвали это без него.

0 голосов
/ 27 марта 2012

Вы получаете эту ошибку, потому что вы не передаете объект TestClass1 этому методу.

Правильно скомпилированный код будет выглядеть так:

inline void AllocateWithMemPoolAux() 
{  
   TestClass1 tObj; 
   mObjFactory->CreateObject<TestClass1>(tObj); 
}

Я предполагаю, что вашAllocateWithMemPoolAux() имеет больше побочных эффектов, чем показано здесь;как минимум вам нужно что-то сделать с возвращаемым значением функции CreateObject (может быть лучше вместо этого передать объект по ссылке в эту функцию).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...