首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >可以在C ++中实现一个自治的`self`成员类型吗?

可以在C ++中实现一个自治的`self`成员类型吗?
EN

Stack Overflow用户
提问于 2018-04-17 05:44:22
回答 2查看 0关注 0票数 0

C ++ 缺少PHP关键字的等价物,self关键字的计算结果为封闭类的类型。

以每类:

代码语言:javascript
复制
struct Foo
{
   typedef Foo self;
};

我不得不再次写Foo。也许我有一天会犯这个错误,并导致一个沉默的错误。

代码语言:javascript
复制
struct Foo
{
   typedef decltype(*this) self;
};

// main.cpp:3:22: error: invalid use of 'this' at top level
//     typedef decltype(*this) self;
EN

回答 2

Stack Overflow用户

发布于 2018-04-17 14:19:36

下面是如何在不重复foo类型的情况:

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

代码语言:javascript
复制
class WITH_SELF_DERIVED(Bar,Foo)
{
    /* ... */
};

代码语言:javascript
复制
class WITH_SELF(Foo2)
{
    /* ... */
};

class WITH_SELF_DERIVED(Bar2,Foo,Foo2)
{
    /* ... */
};
票数 0
EN

Stack Overflow用户

发布于 2018-04-17 15:09:57

代码语言:javascript
复制
#define CLASS_WITH_SELF(X) class X { typedef X self;

然后

代码语言:javascript
复制
CLASS_WITH_SELF(Foo) 
};

也可以采取

代码语言:javascript
复制
#define WITH_SELF(X) X : public Self<X>

class WITH_SELF(Foo) {
};
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100008139

复制
相关文章

相似问题

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