Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 创建模板类的std::vector?_C++_Templates_Vector - Fatal编程技术网

C++ 创建模板类的std::vector?

C++ 创建模板类的std::vector?,c++,templates,vector,C++,Templates,Vector,我目前有一个使用模板参数的类。我需要一组这样的。我怎样才能做到这一点(没有助推)。 例: 模板 类事件{ RET(*onEvent)(T参数); 双时间戳; 公众: RET呼叫(T arg); bool过期(); AguiTimedEvent(); AguiTimedEvent(RET(*Timefunc)(T arg),双timeSec); }; 我需要这样做: AguiTimedEvent t<int, int>(func, 5.0); v.push_back(t); ...

我目前有一个使用模板参数的类。我需要一组这样的。我怎样才能做到这一点(没有助推)。 例:

模板
类事件{
RET(*onEvent)(T参数);
双时间戳;
公众:
RET呼叫(T arg);
bool过期();
AguiTimedEvent();
AguiTimedEvent(RET(*Timefunc)(T arg),双timeSec);
};
我需要这样做:

AguiTimedEvent t<int, int>(func, 5.0);
v.push_back(t);
...
v[0].call();
aguitimedt事件(func,5.0);
v、 推回(t);
...
v[0].call();
我实际上不需要返回值,但我只需要它使它更灵活。如果返回值导致了问题,我可以将其限制为void函数,但必须对arg进行模板化。我能做什么?谢谢

*我需要向量来处理任何类型,我需要一个数组,其中数组可以分派xy的事件,而不仅仅是int int

std::vector v;
std::vector<AguiTimedEvent<int, int> > v;

如果需要存储具有不同模板参数的不同类型的对象,则需要创建一个基类(例如,
AguiTimedEventBase
),并将指针存储在
向量中

我没有遇到以下代码的问题:

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;
}
模板
类事件{
RET(*onEvent)(T参数);
双时间戳;
公众:
RET调用(T arg){return 0;}
bool过期(){}
AguiTimedEvent(){}
AguiTimedEvent(RET(*Timefunc)(T arg),双timeSec){}
};
int func(int x){返回0;}
int main()
{
向量v;
AguiTimedEvent t(函数,5.0);
v、 推回(t);
返回0;
}

请注意“>>”之间的额外空格,否则编译器将无法正确读取。抱怨,+1,但我只会让你在顶级用户列表中的排名高于我。>:(.我需要通过你。:@GMan:哈哈。好吧,对于你在所有时间列表中的位置来说,好消息是:现在C++不再是我最常用的语言了,我期待我参与[c++ ]的减少(就在我停止敲我的头,我想知道为什么C不能仅仅是一个更像C++ C++:-D)我不知道基类的想法是如何实现的?米洛:Boost不是魔术,它仍然是用C++编写的。您可以打开它并尝试自己重新编写它。我真的建议你采用Boost,但是如果它不是int,我需要向量来处理它type@Milo,你的意思是一个向量应该包含多种类型吗?我认为这是不可能的。@Donotalo实现相同效果的方法是什么?@Donotalo多态性在这方面并不是很有用,因为必须为每个参数创建一个派生类type@Milo:这正是多态性有用的原因:您有许多派生类,它们都具有相同的行为。我怀疑您也打算这样做指定您不关心返回类型,因此向量应该处理不同返回类型的事件?@GMan yes,以及任意参数类型的事件。您确实在研究重新发明Boost.Function、Boost.Bind和/或Boost.Signals。你最好的办法是要么使用它们,要么看着它自己重新编写。
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;
}