C ++ 缺少PHP关键字的等价物,self关键字的计算结果为封闭类的类型。
以每类:
struct Foo
{
typedef Foo self;
};
我不得不再次写Foo
。也许我有一天会犯这个错误,并导致一个沉默的错误。
struct Foo
{
typedef decltype(*this) self;
};
// main.cpp:3:22: error: invalid use of 'this' at top level
// typedef decltype(*this) self;
发布于 2018-04-17 14:19:36
下面是如何在不重复foo类型的情况:
template <typename...Ts>
class Self;
template <typename X, typename...Ts>
class Self<X,Ts...> : public Ts...
{
protected:
typedef X self;
};
#define WITH_SELF(X) X : public Self<X>
#define WITH_SELF_DERIVED(X,...) X : public Self<X,__VA_ARGS__>
class WITH_SELF(Foo)
{
void test()
{
self foo;
}
};
class WITH_SELF_DERIVED(Bar,Foo)
{
/* ... */
};
class WITH_SELF(Foo2)
{
/* ... */
};
class WITH_SELF_DERIVED(Bar2,Foo,Foo2)
{
/* ... */
};
发布于 2018-04-17 15:09:57
#define CLASS_WITH_SELF(X) class X { typedef X self;
然后
CLASS_WITH_SELF(Foo)
};
也可以采取
#define WITH_SELF(X) X : public Self<X>
class WITH_SELF(Foo) {
};
https://stackoverflow.com/questions/-100008139
复制相似问题