部分模板专门化——将类型作为参数传递

Partial template specialization - passing types as arguments?

本文关键字:类型 参数传递 专门化      更新时间:2023-10-16

我正在尝试编写一个包装器围绕形式typeid()==typeid()的调用,以防止传递指针/指针类型作为参数(一个容易产生且难以检测的错误)。

所以现在调用的是typeid(ClassA)==typeid(arg),我想用safesametype(ClassA, arg)或类似的东西代替它。然后,应该在编译时检查这两个实参是否实际上都没有指向指针。

使用Loki库的功能,我几乎做到了,但还没有完全做到。我目前能够调用safesametype<ClassA, SuperClassOfA>(arg),其中SuperClassOfAarg的类型。

有没有人有关于我如何可以放弃SuperClassOfA规范的想法?这是当前源:

#include "loki/NullType.h"
#include "loki/TypeTraits.h"
#include "loki/static_check.h"
#include <typeinfo>
class CannotCompareTypeIDofPointers{};
template<class T, class T2>
bool safesametype(const T& object){
    LOKI_STATIC_CHECK(not Loki::TypeTraits<T>::isPointer, InvalidTypeIDCheck);
    LOKI_STATIC_CHECK(not Loki::TypeTraits<T2>::isPointer, InvalidTypeIDCheck);
    return typeid(object)==typeid(T2);
}

提前感谢!

兄弟

(PS没有解决方案告诉我不要使用typeid)

只需交换模板参数。

template <class TestType, class ArgType>
bool instanceof(const ArgType& object) {
    // checks here
    return typeid(TestType) == typeid(object);
}

调用:

instanceof<ClassA>(arg)