在C++中,我可以重置操作符的函數指針嗎?在C++中,我可以重置操作符的函數指針嗎?
特別是我想設置成員函數operator []使用(或不使用)邊界檢查。我試過這個沒有運氣:
這甚至有可能嗎?如果是這樣,任何人都可以糾正語法?
在MyArrayClass.h:
class MyArrayClass {
public:
bool CheckArrayBounds;
float BoundsCheck(int i) {
if (i<_size)
return _data[i];
return TCpx(_INVALID);
}
float NoBoundsCheck(int i) {
return _data[i];
}
void UseBoundsCheck(bool State) {
if (State) {
float (operator[]) = &MyArrayClass::BoundsCheck;
} else {
float (operator[]) = &MyArrayClass::NoBoundsCheck;
}
CheckArrayBounds = State;
}
float operator[](int i) { return _data[i]; };
};
而不是使用一個條件,你可以像'std :: vector'那樣通過'operator []()'和一個函數'at()'來做到這一點,它們都做同樣的事情。除了'operator []()'沒有邊界檢查和'at()'邊界檢查。 –
難道你不能像std :: vector一樣使用STL容器嗎?您是否試圖實現STL容器中不可用的某些功能? – Gob00st
運算符通常是內聯定義的(就像這裏),因此通常並不真正「被調用」,而是取而代之的是它們被使用的地方。這發生在編譯時,所以它的定義不可能在運行時改變。但是,當然,您可以根據某些變量更改運算符[]的行爲以執行邊界檢查或不執行邊界檢查。唯一的辦法是,可以通過共享庫來完成像我改變函數指針那樣的事情。 –