【发布时间】:2014-05-16 20:00:57
【问题描述】:
我有一个指针类型 Ptr。它可能是 T*、unique_ptr、shared_ptr 或其他。如何在编译时获得其指向的类型?我尝试以下但失败了
template<class Ptr>
void f()
{
typedef decltype(*Ptr()) T; // give unexpected results
}
以下已删除的答案效果很好。
typedef typename std::remove_reference<decltype(*std::declval<Ptr>())>::type T;
【问题讨论】:
-
It might be T*, unique_ptr, shared_ptr, or others- 怎么样?多态还是模板? -
@icepack scoped_ptr 或其他智能指针。只需要知道它的静态类型(编译时)。
-
@user1899020 问题是
Ptr可以是没有解引用运算符的东西。 -
@Jason 那么它就不是指针了。
-
我也不确定为什么这个答案也被删除了,但问题是当
Ptr是(比如说)int*,decltype(*Ptr())的结果是int&。它是一个参考的事实可能会破坏其他地方的编译。
标签: c++ typetraits