создание std :: vector шаблонного класса? - PullRequest
0 голосов
/ 14 октября 2010

В настоящее время у меня есть класс, который использует аргументы шаблона.Мне нужен массив из них.Как я мог это сделать (без наддува).Например:

template <typename RET, typename T>
class AguiTimedEvent {
    RET (*onEvent)(T arg);
    double timeStamp;
public:
    RET call(T arg);
    bool expired();
    AguiTimedEvent();
    AguiTimedEvent(RET (*Timefunc)(T arg), double timeSec);
};

, и мне нужно что-то вроде:

AguiTimedEvent t<int, int>(func, 5.0);
v.push_back(t);
...
v[0].call();

Мне на самом деле не нужно возвращаемое значение, но у меня просто есть, чтобы сделать его более гибкимЕсли возвращаемое значение вызывает проблему, я могу ограничить его аннулированием функций, но вызов arg должен быть задан шаблонно.Что я могу сделать?Спасибо

* Мне нужен вектор для обработки любого типа, мне нужен массив, в который массив может отправлять события XY, а не только int int

Ответы [ 2 ]

2 голосов
/ 14 октября 2010
std::vector<AguiTimedEvent<int, int> > v;

Если вам нужно хранить объекты разных типов AguiTimedEvent, которые имеют разные аргументы шаблона, вам нужно создать базовый класс (например, AguiTimedEventBase) и хранить указатели в vector.

0 голосов
/ 14 октября 2010

У меня не было проблем со следующим кодом:

template <typename RET, typename T>
class AguiTimedEvent {
    RET (*onEvent)(T arg);
    double timeStamp;
public:
    RET call(T arg) {return 0;}
    bool expired() {}
    AguiTimedEvent() {}
    AguiTimedEvent(RET (*Timefunc)(T arg), double timeSec) {}
};

int func(int x) {return 0;}

int main()
{
    vector< AguiTimedEvent<int, int> > v;
    AguiTimedEvent<int, int> t(func, 5.0);

    v.push_back(t);

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