相关疑难解决方法(0)

C++ 11:如何获取指针或迭代器指向的类型?

更具体地讲,假设我写template<class Pointer> class Foo,我要声明一个typedef类里面的那个类型*p,如果必须p是类型Pointer.

在C++ 03中,据我所知,唯一的方法是使用类似的东西

typename std::iterator_traits<Pointer>::reference
Run Code Online (Sandbox Code Playgroud)

这种方法的缺点是,如果Pointer是一些自定义迭代器类型并且作者忘记扩展std::iterator或以其他方式定义特化,它将不起作用std::iterator_traits.

在C++ 11中,我的同事建议

decltype(*Pointer())
Run Code Online (Sandbox Code Playgroud)

但是如果Pointer不是默认构造的话,这将不起作用,所以他将其修改为

decltype(**(Pointer*)0)
Run Code Online (Sandbox Code Playgroud)

我尝试了这个,但它确实有效,但后来我认为它看起来有点不确定因为它涉及空引用的解引用,因此可能不符合标准.

我们可以做得更好吗?

c++ templates c++11

19
推荐指数
1
解决办法
5091
查看次数

C++中的空指针

在C++中,我声明一个空指针int* p=0,这是否意味着零是整数指针类型的一些特殊常量,或者它是否意味着p指向地址0x0?当然,因为它0x0必须是C++在分配变量/数组时从不接触的特殊地址.

c++ pointers

2
推荐指数
1
解决办法
2124
查看次数

标签 统计

c++ ×2

c++11 ×1

pointers ×1

templates ×1