我正在尝试围绕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);
}
提前致谢!
布氏
(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/