Я хочу создать API, который при вызове функции, такой как getCPUusage()
, перенаправляет на getCPUusage()
функция для Windows или Linux.
Так что я использую клеевой файл api.h
:
getCPUusage() {
#ifdef WIN32
getCPUusage_windows();
#endif
#ifdef __gnu_linux__
getCPUusage_linux();
#endif
}
Так что мне интересно, если с помощью inline
было бы лучшим решением, так как с тем, что у меня есть, вызов будет больше.
Мой вопрос заключается в следующем: лучше ли использовать встроенную функцию для каждого вызова в этой ситуации?
Это зависит от варианта использования вашей программы. Если потребитель по-прежнему c ++ — тогда в строке есть смысл.
Но просто предположим, что вы хотели бы повторно использовать его в C, Pascal, Java … в этом случае inline не тот случай. Вызывающий должен экспортировать стабильное имя через lib, но не из заголовочного файла.
Lib для linux довольно прозрачный, в то время как на Windows вам нужно применить __dllexport
ключевое слово — это не относится к inline
Ответ: да, это действительно более эффективно, но, вероятно, не стоит:
Если вы помещаете эти функции в класс, не обязательно записывать ключевое слово «inline» в вашей ситуации, потому что у вас есть только заголовочный файл (у вас нет cpp-файлов — в соответствии с вашим описанием ). Функции, которые реализованы внутри определения класса (в заголовочном файле), будут автоматически рассматриваться компилятором как встроенные функции. Обратите внимание, что это всего лишь «подсказка» компилятору. Компилятор все еще может решить сделать вашу функцию не встроенной, если она будет признана (компилятором) более эффективной. Для небольших функций, подобных вашей, он, скорее всего, будет создавать реальные встроенные функции.
Если вы не помещаете эти функции в класс, я не думаю, что вам стоит добавлять встроенные функции, поскольку (как сказано выше) это всего лишь «подсказка», и даже без этих «подсказок» современные компиляторы выяснят, что функции, чтобы встроить в любом случае. Люди гораздо чаще ошибаются в этих вещах, чем компилятор.