使用类名的模板值作为指针

Use template value for class name as pointer

本文关键字:指针      更新时间:2023-10-16

我想向另一个对象发送一个"ping",看看它是否还活着。这主要用于开发期间的测试。我最终一遍又一遍地编写相同的代码,所以我正在研究如何模板化它。这是我的代码(尚不起作用):

template<class T>
bool pingTest(T) {
    return T.ping();  // <<< HOW DO I FORM THIS LINE?
}

这是因为您应该添加一个实例:

template<class T>
bool pingTest(T& instance) {
    return instance.ping();  // <<< HOW DO I FORM THIS LINE?
}

或者,更好的是:将ping设置为静态,这样就不需要将T的实例传递到函数中,从而节省内存和时间:

template<class T>
bool pingTest() {
    return T::ping();  // <<< HOW DO I FORM THIS LINE?
}

T只是一个类型名称,但没有这种类型的实例(对象)可以运行此方法。

template<class T>
bool pingTest(T o) {
 return o.ping();
}

你能做int+int吗?不可以,但可以添加两个整数值:

int a = 1, b = 2;
a + b;             // a meaningful expression

同样,如果T表示公开函数ping的类型,则可以在类型为 T 的对象上调用它,但不能在T本身上调用它,当然,除非ping是一个静态函数。