部分模板专业化 - 将类型作为参数传递?

时间:2011-10-11 12:44:15

标签: c++ templates rtti

我试图围绕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);
}

提前感谢!

Broes

(PS请不要告诉我不要使用typeid

1 个答案:

答案 0 :(得分:3)

只需交换模板参数。

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

请致电:

instanceof<ClassA>(arg)