如何使用boost is_class来确定对象是否为类
How to use boost is_class to determine if an object is a class?
对于以下代码:
template<class _InIt,
class _Ty,
class _Fn2> inline
_Ty accumulateSimplePtr(_InIt _First, _InIt _Last, _Ty _Val, _Fn2 _Func)
{ // return sum of _Val and all in [_First, _Last), using _Func
for (; _First != _Last; ++_First)
{
if(is_class<std::iterator_traits<_InIt>::value_type>::value)
_Val = _Func(_Val, (*_First)());
else
_Val=_Func(_Val, *_First);
}
return (_Val);
}
我如何判断_InIt是一个指向类/结构的interator还是指向像double这样的pod?
如果它指向一个双精度,我想使用*_First来获取数据,如果它指向某个类,我会使用(*_First)()来获取实际数据(假设该类有一个重载的运算符())。
我尝试了上面的方法,但它无法用"_Val=_Func(_Val,*_First);"行编译,并表示MyObj不能转换为double。
#include <iostream>
#include <type_traits>
#include <vector>
class A
{
public:
int a;
int b;
};
template<typename T>
struct IsClass
{
enum { Yes = std::is_class<T>::value };
enum { No = !Yes };
};
int main(int argc, char* argv[])
{
std::vector<int> v1;
std::vector<A> v2;
auto it1 = v1.begin();
auto it2 = v2.begin();
std::cout << IsClass<std::decay<decltype(it1)>::type::value_type>::Yes << std::endl;
std::cout << IsClass<std::decay<decltype(it2)>::type::value_type>::Yes << std::endl;
std::cin.get();
return 0;
}
这些行的输出是0(false,对于int矢量)和1(true,对于A矢量)。
相关文章:
- 当一个新对象被分配到它的地址时,对象是否必须被销毁
- 在这种情况下,java对象是否可以调用本机函数
- 堆分配的对象是否存在永不为空的唯一所有者?
- QFileSystemModel 对象是否会被删除?
- 具有相同特征的两个对象是否只在内存中存储一次?无论定义它们的函数是什么,都是不同的
- 内联函数的函数本地静态对象是否在共享对象文件之间共享?
- 临时C++对象是否为左值?
- 为什么复制构造函数不需要检查输入对象是否指向自身?
- "this"指向的对象是否与 const 对象相同?
- 有什么方法可以检测我的类的对象是否在堆栈上创建
- 基类对象是否隐式添加到派生类中?
- 当 T 具有非平凡析构函数时,类类型 T 的对象是否可以常量初始化?
- 如何检查指针后面的对象是否有效或已删除?
- 谷神星求解器:残差函子使用的可变对象是否良好实践?还有什么其他选择
- 单一实例对象是否通过线程安全返回shared_ptr
- 对象是否保证在调用其成员函数之前被初始化
- 在另一个对象 B 中创建对象 A 时,对象 A 是否是对象 B 的本地对象,对象 A 是否会存在于对象 B 的实例化之外?
- 如何确定对象是否已分配成员
- 我们如何在c 中序列化或应对类的对象.是否有任何预定义的库
- 友元类对象是否可以在其成员函数中访问派生类对象的基类私有成员?