这对我有用:
#include <type_traits>
#include <array>
#include <utility>
template <class T2>
inline void f(T2* const myarray)
{
std::pair<double, typename T2::value_type> x;
static_assert(std::is_same<decltype(x.second), int>::value, "");
}
int
main()
{
std::array<int, 2> a;
f(&a);
}
如果您的“类数组”类模板没有value_type
,则以下内容也应该有效:
std::pair<double, typename std::remove_reference<decltype((*myarray)[0])>::type> x;
但是仅供参考,通常不使用 const 限定参数,并且在 C++11 中,如果您碰巧返回参数(如下所示),甚至会感到悲观:
return myarray;
虽然在这种情况下myarray
是一个指针,但在这种情况下它是 const 并不重要。
如果您的意思是:
inline void f(T2 const* myarray)
(指向 a的指针const T2
,而不是指向 a 的const
指针T2
)
那么上面的配方需要稍微调整一下:
std::pair<double, typename std::remove_const<
typename std::remove_reference<
decltype((*myarray)[0])
>::type
>::type> x;
如果您的“类数组”类模板确实有value_type
,那么第一个建议:
std::pair<double, typename T2::value_type> x;
无论在哪里const
都可以使用。