C++ 如何推断自动指针指向的类型?

C++ 如何推断自动指针指向的类型?,c++,c++11,C++,C++11,在下面的代码段中,我使用auto获取A.shape()的输出,它实际返回std::size\t*。然后我想创建一个具有相同底层数据类型的数组,即std::size\t。在这种情况下,我很难想出如何使用decltype()。以下情况不起作用: #include "boost/multi_array.hpp" int main() { boost::multi_array<double, 3> A(boost::extents[5][4][2]); auto dims

在下面的代码段中,我使用
auto
获取
A.shape()
的输出,它实际返回
std::size\t*
。然后我想创建一个具有相同底层数据类型的数组,即
std::size\t
。在这种情况下,我很难想出如何使用
decltype()
。以下情况不起作用:

#include "boost/multi_array.hpp"

int main() {
    boost::multi_array<double, 3> A(boost::extents[5][4][2]);
    auto dims = A.shape();
    boost::array<decltype(*dims), 3> dims3;    // does not compile
}

有没有更好的方法来实现这一点?最好不必生成中间变量?

在解引用运算符上使用
decltype()
时删除引用:

using type = typename std::remove_reference<decltype(*(A.shape()))>::type;
使用type=typename std::remove\u reference::type;

这是因为解引用运算符返回对迭代器指向的基础元素的左值引用(以便能够在其上读写)。

在解引用运算符上使用
decltype()
时删除引用:

using type = typename std::remove_reference<decltype(*(A.shape()))>::type;
使用type=typename std::remove\u reference::type;

这是因为解引用运算符返回对迭代器所指向的底层元素的左值引用(以便能够在其上读写)。

这是因为
decltype(*dims)
std::size_t&
而不是
std::size_t
。这是因为
decltype(*dims)
std::size\u t&
而不是
std::size\u t
。看起来上面有一个打字错误。是否应该是
std::remove_reference
?当我有一个要在别处存储副本的对象时,我发现
std::decay
很有用,因为它处理引用剥离、移除cv和处理函数到函数指针以及数组到指针的衰减。最后一个,我承认,是有问题的。@Yakk:是的,
std::decay
对我来说更好,因为
A.shape()
实际上返回一个
const std::size\u t*
,所以我也不得不使用
std::remove\u const
<代码>标准::衰变一次完成这两项功能。看起来上面有一个打字错误。是否应该是
std::remove_reference
?当我有一个要在别处存储副本的对象时,我发现
std::decay
很有用,因为它处理引用剥离、移除cv和处理函数到函数指针以及数组到指针的衰减。最后一个,我承认,是有问题的。@Yakk:是的,
std::decay
对我来说更好,因为
A.shape()
实际上返回一个
const std::size\u t*
,所以我也不得不使用
std::remove\u const
<代码>标准::衰减一次完成这两项功能。