如何为包含另一个 class 实例的数组创建 const getter?

How to make a const getter for an array which contains another class's instances?

问题是 getter 必须处理 const bar 对象。但是编译器说:

[Error] invalid conversion from 'const foo*' to 'foo*' [-fpermissive]

代码:

class foo
{
private:
    string name;
public:
    foo()
    {
        name = "default";
    }
};

class bar
{
private:
    foo array_of_foo[43];
public:
    foo* get_array_of_foo() const { return array_of_foo; }
};

实际上 需要从常量 bar 获取可变 foo 数组吗?这听起来不太可能,而且可能不是您真正想要的,除非您正在进行大而痛苦的重构。

更好的选择是:

// Return a mutable foo array from a mutable bar.
foo* get_array_of_foo() {return array_of_foo;}

// and/or

// Return a const foo array from a const bar.
const foo* get_array_of_foo() const {return array_of_foo;}

但是,如果您确实确实需要这样做,那么您可以使用const_cast<>摆脱困境。

foo* get_array_of_foo() const {return const_cast<foo*>(array_of_foo);}

话虽这么说,但这是一个巨大的代码味道,也是最后的手段。