typedef类类型,不使用其名称

时间:2014-02-11 06:31:15

标签: c++ c++11 macros typedef decltype

我的代码中有几个宏,它们将周围类的名称作为参数之一。例如:

struct Foo {
  MAKE_NON_COPYABLE(Foo);
  // ...
};

(MAKE_NON_COPYABLE基本上声明复制ctor,赋值运算符等私有)

我想要做的是将“Foo”参数放到宏中。要做到这一点,我需要在宏中使用typedef来typedef周围的类类型。应该看起来像这样:

#define DECLARE_THIS_TYPE \
  typedef /* ? */ ThisType;

#define MAKE_NON_COPYABLE \
  DECLARE_THIS_TYPE; \
  // declare private ctor, operator= etc. using ThisType

我尝试做的是使用decltype声明一个返回类型为this的方法:

auto ReturnThisType() -> decltype(*this) { return *this; }

但不幸的是我不能写:

typedef decltype(ReturnThisType()) ThisType;

因为我收到以下错误:

  

错误:无法调用成员函数'Foo&富:: ReturnThisType()”   没有对象

注意我不能使用技巧

typedef decltype(((Foo*)nullptr)->ReturnThisType()) ThisType;
typedef decltype(std::declval<Foo&>().ReturnThisType()) ThisType;

由于宏不了解Foo ......

0 个答案:

没有答案