0

我有一个看起来像这样的类(删除了细节):

class MyClass{
        int seq[8];
        ...
    public:
        ...
        static struct{
            bool sorted();
            bool reverse_sorted();
            ...
        }test;
};

我想要做的是将我的一些MyClass成员函数分成漂亮的小组(结构)。问题是“test”结构中的函数需要访问MyClass.

当我使用上面的代码时,我可以定义bool sorted(){..},但它不会MyClass像我希望的那样使它成为命名空间的一部分。

我的目的是能够写出这样的东西:

MyClass M;

*do stuff with M*

if( M.test.sorted()){
    *do something*
}
else if( M.test.reverse_sorted()){
    *do something else*
}

有没有办法这样的事情是可能的?(如何)我可以允许内部结构访问类的数据成员吗?&& 我仍然可以使用“ MyObject.test.function()”语法访问函数吗?

4

2 回答 2

0

您可以将您的结构声明为friend您的类以实现您想要的,但您必须提供您的类的引用。老实说,我会考虑那种糟糕的风格,但这很有效:

class M
{
    public:
        struct x
        { bool sorted(M & m) const { return m.sorted; } } test;

    private:
        bool sorted;
        friend class x;
};
于 2013-07-12T08:11:19.373 回答
0

我建议使用简单的东西:

class MyClass
{
        int seq[8];
        ...
    public:
        ...

        bool group1_sorted();
        bool group1_reverse_sorted();

        int  group2_something_else();
};

前缀会给你足够的亮点,而所有的问题都会神奇地消失……你为什么需要这些结构?

于 2013-07-12T08:12:43.320 回答