我想测试一个变量类型的属性。我做到了,但代码太冗长了。
考虑一个例子,我在其中定义一个与容器中值类型相同类型的变量:
#include <vector>
int main() {
std::vector<int> v, &rv=v;
// ‘rv’ is not a class, namespace, or enumeration
//rv::value_type i1;
// Ok
decltype(v)::value_type i2;
// decltype evaluates to ‘std::vector<int>&’, which is not a class or enumeration type
//decltype(rv)::value_type i3;
// Ok
std::remove_reference<decltype(rv)>::type::value_type i4;
}
我可以使用decltype
,但添加std::remove_reference
太多了。有没有很好的方法来缩短代码,而无需定义辅助模板?
答案 0 :(得分:1)
你可以用
中的一个来缩短它std::decay_t<decltype(rv)>::value_type i4 = 42;
或
std::decay_t<decltype(*std::begin(rv))> i4 = 42;
答案 1 :(得分:0)
使用一些使用声明:
using my_value_type = decltype(v)::value_type;
using your_value_type = std::remove_reference<decltype(rv)>::type::value_type;
您的代码将变为:
int main() {
std::vector<int> v, &rv=v;
using my_value_type = decltype(v)::value_type;
using your_value_type = std::remove_reference<decltype(rv)>::type::value_type;
my_value_type i2;
your_value_type i4;
}