2011-10-11 70 views
0

我试图编写一个包装形式为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

回答

3

只是交换模板参数。

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

电话为:

instanceof<ClassA>(arg) 
+0

这么简单:)谢谢! –

相关问题