Я пытаюсь написать оболочку для вызовов в форме 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
)