部分模板专门化——将类型作为参数传递
Partial template specialization - passing types as arguments?
我正在尝试编写一个包装器围绕形式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++ 中将非指定类型作为参数传递的最佳方法?
- 为模板传递非类型参数 agument
- 为什么 std::bind 静态类型检查传递给函数的参数?
- 将函数类型作为模板参数传递不会编译
- 通过参数传递 lambda(无函数类型模板)
- 将内置类型变量传递给只有一个类类型参数的"+"运算符函数时自动类型转换的构造函数
- C++模板;作为模板参数传递的函数的自动推导返回类型
- 在一行中将默认类型值上的指针作为参数传递
- 如何使用非类型参数传递模板化类的 Ref 或 Ptr
- 是否可以在不使用数组的情况下将不同数量的相同类型的参数传递给函数?
- 如何将二维数组类型字符(字符串)作为函数参数传递?
- 将指定的模板类型作为模板参数传递
- 将类型参数传递给自引用指针
- 将类作为函数参数传递时C++不完整的类型错误
- 将具有可选模板类型参数的函数传递给类构造函数并将其分配给方法
- 非类型模板参数中的占位符类型是否涉及作为模板参数传递的函数的重载解析?
- 将 lambda 作为模板参数传递:实际推导出什么类型
- 在c++模板中将Class作为非类型参数传递
- 为什么结构不能作为值作为模板非类型参数传递?
- C++11通过推导的类型参数传递成员函数调用