首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >&decltype(Obj)::成员不工作

&decltype(Obj)::成员不工作
EN

Stack Overflow用户
提问于 2012-12-11 18:17:03
回答 2查看 139关注 0票数 4

为什么这不起作用(Visual C++ 2012更新1),修复它的正确方法是什么?

代码语言:javascript
复制
#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);
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-12-11 19:28:33

decltype作为嵌套名称说明符在相对较晚的阶段被添加到C++11中;n3049作为对DR 743 (和DR 950)的解析。n3049是在2010年3月发布的,这可能是它还没有进入VC++的原因。

解决方法是使用身份类型函数:

代码语言:javascript
复制
template<typename T> using id = T;
id<decltype(expression)>::member;
票数 6
EN

Stack Overflow用户

发布于 2012-12-11 18:59:50

一个编译器错误。

明确允许将解密类型说明符(7.1.6.2简单类型说明符dcl.type.simple)作为嵌套名称特定项(5.1主表达式expr.prim -> 5.1.1通用expr.prim.general] #8)

PS。在@ecatmur的想法之后:

代码语言:javascript
复制
template<typename T> struct id { typedef T type; };

#define bindm(obj, f, ...)  bind(&id<decltype(obj)>::type::f, obj, __VA_ARGS__)
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13818072

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档