2013-07-28 2 views
2

Типичный геттер/сеттер выглядит следующим образом:Как сделать указатель на функцию постоянной

void setName(const std::string& _name) { name = _name; } 
std::string getName() const { return name; } 

Как я могу сделать то же самое, если член является указатель на функцию, как это:

void setBotFunc(int(*botFunc)()) { botFunction = botFunc; } 
int (*getBotFunc() const)() { return botFunction; } 

Особенно Я не знаю, как объявить сеттер таким образом, который говорит: «Я буду читать и не изменять указатель (значение)». Это даже имеет смысл? const int (*botFunct)(), очевидно, рассматривается как функция, которая возвращает const int.

+0

Значение указателя копируется в любом случае ... Я не вижу большого смысла в создании переменной указателя const. – StoryTeller

+0

Используйте typedef для типов функций, и вы больше не увидите проблемы. –

+0

@StoryTeller Когда параметр указателя функции определяется как 'const', любые случайные попытки изменить его в' setBotFunc() 'приведет к ошибке: присвоение параметра только для чтения во время компиляции. Это лучше, чем альтернатива, которая является сбоем seg во время выполнения позже, при попытке перейти к адресу, указанному параметром необязательно измененного параметра функции. – TheCodeArtist

ответ

1
void setBotFunc(int(* const botFunc)()) 
{ 
    botFunction = botFunc; 
} 
Смежные вопросы