Я кодирую библиотеку и хочу, чтобы пользователь мог использовать метод stati c, если ему не нужен экземпляр, но если он есть, он должен использовать данные его экземпляр.
Как правило, рекомендуются бесплатные функции, а не функции-члены ( gotw ). На самом деле редко есть веские причины сделать функцию stati c функцией-членом. Он должен быть членом, если ему потребуется доступ к частным лицам класса, но, похоже, здесь это не так, и тогда это может быть функция друга.
Давайте посмотрим на ваш подход:
static int getData(A *ref){
if(ref != nullptr){
return data;
}else{
return 0;
}
}
Вы, вероятно, хотели написать ref->data;
, также я полагаю, вы не просто возвращаете значение члена. Это было бы бесполезно, потому что, если у меня есть экземпляр, я могу получить x.data
без необходимости звонить getData
. И я полагаю, что 0
- это просто заполнитель для какого-то другого значения, которое у вас есть в реальном коде.
Я сейчас немного субъективен ...
Если бы я был пользователем вашей библиотеке, я хотел бы знать, возвращает ли getData
данные одного из созданных мной объектов или чего-то еще. Наличие одной и той же функции, которая выполняет обе функции, сбило бы меня с толку. Я не люблю указатели и боюсь нулевых указателей, поэтому, если вы заставите меня написать
getData(nullptr);
, это не сделает меня счастливым. Я хотел бы иметь две разные функции:
int getData() { return 0; }
int getData(const A& x) { return x.data; }
Если у меня нет экземпляра, я могу вызвать первую, если у меня есть одна, я могу вызвать вторую.