Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ &;decltype(obj)::成员未工作 #include <boost/lambda/bind.hpp> namespace bll = boost::lambda; struct Adder { int m; Adder(int m = 0) : m(m) { } int foo(int n) const { return m + n; } }; #define bindm(obj, f, ...) bind(&decltype(obj)::f, obj, __VA_ARGS__) int main() { return bll::bindm(Adder(5), foo, bll::_1)(5); } #包括 名称空间bll=boost::lambda; 结构加法器 { int m; 加法器(int m=0):m(m){} int foo(int n)const{return m+n;} }; #定义bindm(obj,f,…)绑定(&decltype(obj)::f,obj,_uva_uargs) int main() { 返回bll::bindm(加法器(5),foo,bll::_1)(5); }_C++_C++11_Member Function Pointers_Decltype - Fatal编程技术网

C++ &;decltype(obj)::成员未工作 #include <boost/lambda/bind.hpp> namespace bll = boost::lambda; struct Adder { int m; Adder(int m = 0) : m(m) { } int foo(int n) const { return m + n; } }; #define bindm(obj, f, ...) bind(&decltype(obj)::f, obj, __VA_ARGS__) int main() { return bll::bindm(Adder(5), foo, bll::_1)(5); } #包括 名称空间bll=boost::lambda; 结构加法器 { int m; 加法器(int m=0):m(m){} int foo(int n)const{return m+n;} }; #定义bindm(obj,f,…)绑定(&decltype(obj)::f,obj,_uva_uargs) int main() { 返回bll::bindm(加法器(5),foo,bll::_1)(5); }

C++ &;decltype(obj)::成员未工作 #include <boost/lambda/bind.hpp> namespace bll = boost::lambda; struct Adder { int m; Adder(int m = 0) : m(m) { } int foo(int n) const { return m + n; } }; #define bindm(obj, f, ...) bind(&decltype(obj)::f, obj, __VA_ARGS__) int main() { return bll::bindm(Adder(5), foo, bll::_1)(5); } #包括 名称空间bll=boost::lambda; 结构加法器 { int m; 加法器(int m=0):m(m){} int foo(int n)const{return m+n;} }; #定义bindm(obj,f,…)绑定(&decltype(obj)::f,obj,_uva_uargs) int main() { 返回bll::bindm(加法器(5),foo,bll::_1)(5); },c++,c++11,member-function-pointers,decltype,C++,C++11,Member Function Pointers,Decltype,一个编译器错误 明确允许decltype说明符(7.1.6.2简单类型说明符[dcl.type.Simple])作为嵌套名称说明符(5.1主表达式[expr.prim]->5.1.1通用表达式prim.General]#8) 注:@ecatmur的想法之后: template<typename T> struct id { typedef T type; }; #define bindm(obj, f, ...) bind(&id<decltype(obj)>

一个编译器错误

明确允许decltype说明符(7.1.6.2简单类型说明符[dcl.type.Simple])作为嵌套名称说明符(5.1主表达式[expr.prim]->5.1.1通用表达式prim.General]#8)

注:@ecatmur的想法之后:

template<typename T> struct id { typedef T type; };

#define bindm(obj, f, ...)  bind(&id<decltype(obj)>::type::f, obj, __VA_ARGS__)
模板结构id{typedef T type;};
#定义bindm(obj,f,…)绑定(&id::type::f,obj,_uva_uargs)

decltype
作为一个嵌套的名称说明符,在相对较晚的阶段被添加到C++11中;作为(和)的决议。n3049于2010年3月发布,这可能就是它尚未进入VC++的原因

解决方法是使用identity typefunction:

template<typename T> using id = T;
id<decltype(expression)>::member;
使用id=T的模板;
id::成员;

适用于gcc和clang++,遗憾的是,VC11也没有模板typedef。但是
std::common\u type::type
也应该这样做。VC++为此包含了不再存在的
std::identity
元函数。