我希望测试变量类型的属性。虽然我可以做到,但代码太冗长。
考虑一个例子,在这个例子中,我定义了一个与容器中值的类型相同的变量:
#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
太过繁琐。有没有简化代码的好方法,而不需要定义辅助模板?
remove_reference
这一行看起来对我来说并不那么糟糕,尤其是考虑到你不会做这种事情数十次。话虽如此,答案可能是“不”。 - Baum mit Augenusing
语句并将其别名为value_type
或其他名称。 - jaggedSpiredecltype(m.key_comp())
是一个解决方案。但是,我很好奇是否可以解决“Y”。 - olpa