我正在尝试围绕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)

关于c++ - 部分模板特化-将类型作为参数传递?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7726213/

10-16 08:02