我的代码中有几个宏,它们将周围类的名称作为参数之一。例如:
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 ......