草庐IT

decltype

全部标签

c++ - 如何从 STL 容器实例中获取元素类型?

我知道value_type、key_type......但它们对类型而不是实例进行操作。我试过了像这样的东西:std::setmySet;decltype(mySet)::value_typepos;但它不起作用。编辑:我使用VS2010。EDIT2:这段代码的目的是获取一个类型来将其提供给boost::lexical_cast有没有一种解决方法可以做到这一点?我想要这样的东西:mySet.insert(boost::lexical_cast(*it));//itisaiteratorinvectorofstringsEDIT3:这可行:mySet.insert(boost::lexi

c++ - 使用 decltype/SFINAE 检测运算符(operator)支持

一个(有点)过时的article探索使用方法decltype与SFINAE一起检测类型是否支持某些运算符,例如==或.这是检测类是否支持的示例代码运营商:templatestructsupports_less_than{staticautoless_than_test(constT*t)->decltype(*tless_than_test(...){}staticconstboolvalue=(sizeof(less_than_test((T*)0))==1);};intmain(){std::cout::value这会输出true,因为当然std::string支持运算符(oper

c++ - 使用 decltype/SFINAE 检测运算符(operator)支持

一个(有点)过时的article探索使用方法decltype与SFINAE一起检测类型是否支持某些运算符,例如==或.这是检测类是否支持的示例代码运营商:templatestructsupports_less_than{staticautoless_than_test(constT*t)->decltype(*tless_than_test(...){}staticconstboolvalue=(sizeof(less_than_test((T*)0))==1);};intmain(){std::cout::value这会输出true,因为当然std::string支持运算符(oper

c++ - 为什么以及如何额外的括号改变 C++ (C++11) 中表达式的类型?

在什么情况下额外的分组括号会破坏C++(特别是C++11)中的内容?由于与此处无关的原因,我最终得到了一个表达式,该表达式周围有一组额外的、不必要的括号,我发现C++11typeinfo函数is_same正在确定它与没有括号的相同代码是不同的类型。这是一个令人费解的行为的简化示例:#includeusingnamespacestd;intmain(){strings="foo";cout::value;cout::value;cout::value;cout::value;return0;}此代码打印“1001”,这似乎表明中间两行中多余的括号导致表达式属于不同类型,但在更大的表达式中

c++ - 为什么以及如何额外的括号改变 C++ (C++11) 中表达式的类型?

在什么情况下额外的分组括号会破坏C++(特别是C++11)中的内容?由于与此处无关的原因,我最终得到了一个表达式,该表达式周围有一组额外的、不必要的括号,我发现C++11typeinfo函数is_same正在确定它与没有括号的相同代码是不同的类型。这是一个令人费解的行为的简化示例:#includeusingnamespacestd;intmain(){strings="foo";cout::value;cout::value;cout::value;cout::value;return0;}此代码打印“1001”,这似乎表明中间两行中多余的括号导致表达式属于不同类型,但在更大的表达式中

c# - C# 是否与 C++11 中的 decltype 等效?

我已经熟悉C++,并且在尝试了C++11提供的一些新功能后,我决定更加熟悉C#。正如预期的那样,编程原理相似,但某些功能不同。差异和相似之处是我所关注的,因此我决定问一下C#是否与C++11中的decltype等效?intx=4;decltype(x)y=16;在上面的示例中,'var'可以正常工作,所以这里有一个示例说明何时需要decltype。如果我只是有条件地调用一个函数,那么我需要声明将保存其结果而不使用'var'的变量,如下所示:varpendingProcessData=trace.UseProcesses();//OnlyrequestCPUschedulingdataw

c# - C# 是否与 C++11 中的 decltype 等效?

我已经熟悉C++,并且在尝试了C++11提供的一些新功能后,我决定更加熟悉C#。正如预期的那样,编程原理相似,但某些功能不同。差异和相似之处是我所关注的,因此我决定问一下C#是否与C++11中的decltype等效?intx=4;decltype(x)y=16;在上面的示例中,'var'可以正常工作,所以这里有一个示例说明何时需要decltype。如果我只是有条件地调用一个函数,那么我需要声明将保存其结果而不使用'var'的变量,如下所示:varpendingProcessData=trace.UseProcesses();//OnlyrequestCPUschedulingdataw

c++ - 尾随返回类型、decltype 和 const-ness

我只是在尝试新的尾随返回类型,但我遇到了这个(简化的)代码的问题#includeclassMyContainer{std::listints;autobegin()->decltype(ints.begin()){returnints.begin();}autobegin()const->decltype(ints.begin()){returnints.begin();}};忽略这段代码毫无意义的事实。重要的部分是使用GCC4.6.1时产生的编译器错误(带有-std=c++0x标志):Inmemberfunction'std::list::iteratorMyContainer::b

c++ - 尾随返回类型、decltype 和 const-ness

我只是在尝试新的尾随返回类型,但我遇到了这个(简化的)代码的问题#includeclassMyContainer{std::listints;autobegin()->decltype(ints.begin()){returnints.begin();}autobegin()const->decltype(ints.begin()){returnints.begin();}};忽略这段代码毫无意义的事实。重要的部分是使用GCC4.6.1时产生的编译器错误(带有-std=c++0x标志):Inmemberfunction'std::list::iteratorMyContainer::b

c++ - 在 decltype 中使用 this 指针

示例(编译良好)structA{voidf(){};autog()->decltype(f()){}};问题如果我在decltype中添加this指针(即decltype(this->f())),我会在gcc4.7.0中得到以下编译错误:error:invaliduseofincompletetype'structA'error:forwarddeclarationof'structA'error:invaliduseofincompletetype'structA'error:forwarddeclarationof'structA'不允许在decltype中使用this吗?有人可以