gpt4 book ai didi

具有模板接口(interface)的 C++ 多态性

转载 作者:行者123 更新时间:2023-11-30 03:03:56 25 4
gpt4 key购买 nike

定时器.h:

template<class T>
class Timer {
public:
typedef T Units;

virtual Units get() = 0;
};

TimerImpl.h:

class TimerImpl: public Timer<long> {
public:

TimerImpl() {
}

~TimerImpl() {

}

long get();

};

FpsMeter.h(版本 1):

template <class T> 
class FpsMeter {
private:
Timer<T>* timer;

public:
FpsMeter (Timer<T>* timer) {
this->timer = timer;
}

...

};

这个例子有效。但它看起来并不漂亮。

Timer<long>* t = new TimerImpl();
FpsMeter<long>* f1 = new FpsMeter<long> (t);

这里有很多额外的模板用途。当类型由实现定义并且用户类不必定义新类型时,我如何实现多类型接口(interface)的想法,它应该使用实现的类型。

最佳答案

如果您不介意总是在堆上创建 FpsMeter 的辅助模板函数,您可以像下面这样

template < class T >
FpsMeter<T> *make_FpsMeter( Timer<T> *timer ) {
return new FpsMeter<T>( timer );
}

然后创建一个适当类型的 FpsMeter 就像这样

FpsMeter<long> *f1 = make_FpsMeter( new TimerImpl() );

或者如果你可以使用 C++11 auto 你会得到

auto f1 = make_FpsMeter( new TimerImpl() );

关于具有模板接口(interface)的 C++ 多态性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9102140/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com