我试图围绕typeid()==typeid()
形式的调用编写一个包装器,以防止将指针/指针类型作为参数传递(容易出错并且难以检测)。
所以现在调用的地方是typeid(ClassA)==typeid(arg)
,我想用safesametype(ClassA, arg)
或类似内容替换它。然后,应该在编译时检查两个参数中是否都没有引用指针。
使用Loki库的功能,我几乎到了那里,但并不完全。我目前能够拨打电话safesametype<ClassA, SuperClassOfA>(arg)
,其中SuperClassOfA
是arg
的类型。
有没有人对我如何放弃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
)
答案 0 :(得分:3)
只需交换模板参数。
template <class TestType, class ArgType>
bool instanceof(const ArgType& object) {
// checks here
return typeid(TestType) == typeid(object);
}
请致电:
instanceof<ClassA>(arg)