class Element {
class Point {
private:
double x;
double y;
public:
//getters/setters for x and y
};
private:
std::string name;
std::vector<Point> values;
public:
void insertValue(unsigned int index, double x, double y);
...
};
class Collection {
private:
std::string name;
std::vector<Element> elements;
public:
...
...
Element* elementAt(unsigned int index) const {
return const_cast<Element*>(&elements.at(index));
}
};
我需要的是從集合中獲取某個索引中的元素來執行諸如Element::insertValues. 這樣做是一種不好的做法,因為它是在Collection::elementAt方法中完成的(使用 const_cast)?從方法中洗掉 const 限定符會更好嗎?我標記了方法 const 因為方法本身不會修改物件。
uj5u.com熱心網友回復:
通常的習慣用法是有兩種方法,一種方法const和一種非方法const。在這種情況下,一個回傳 a const Element *,另一個回傳a Element *,保持一切 const 正確。
const Element* elementAt(unsigned int index) const {
return &elements.at(index);
}
Element* elementAt(unsigned int index) {
return &elements.at(index);
}
是的,這確實會導致一些代碼重復。生活就是這樣,從來沒有人指責過 C 簡潔明了。
PS:你沒有問這個,但一個更好的習慣用法是回傳一個參考,而不是一個指標。std::vector::at回傳一個參考,為什么你的捏擊手不應該做同樣的事情?
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/496794.html
上一篇:C 網路介面無效結果
