я следующий сценарием У меня есть файл .cpp (мне нужно использовать эти на самом деле в Objective-C++ .mm):ехЬегп встроенных функций в C++ для выполнения
#include <utility>
bool g_ready;
std::pair<int, bool> g_pair;
extern inline bool& isReady()
{
return g_ready;
}
extern inline std::pair<int, bool>& GetPair()
{
return g_pair;
}
extern inline void SetPair(int i, bool b)
{
g_pair.first = i;
g_pair.second = b;
}
И тогда я использую этот somehere в другом .cpp файле:
#include <iostream>
extern inline bool& isReady();
extern inline std::pair<int, bool>& GetPair();
extern inline void SetPair(int i, bool b);
void update()
{
if (isReady())
{
SetPair(5, false);
std::cout << "<" << GetPair().first << "," << GetPair().second << ">" << std::endl;
SetPair(1, true);
std::cout << "<" << GetPair().first << "," << GetPair().second << ">" << std::endl;
}
}
Мне нужно, чтобы эти функции вызывались в цикле обновления, называемом каждым фреймом. Это оптимальное решение. Будут ли они на самом деле встроены без каких-либо затрат времени на выполнение?
Редактировать: Производственный компилятор Clang для iOS.
Я редактировал код онлайн. Возможно, я сделал что-то не так, но моя версия компилируется и работает для меня. В моем случае эти функции будут использоваться только один раз, потому что мне нужно регистрировать событие до того, как будет создан экземпляр регистратора. Поэтому я не могу придумать лучшего решения. Мы используем MSVC для разработки, но выпуск продукции будет составлен Clang. – Zingam
@ Zingam: Некоторые компиляторы могли бы связать его, несмотря на нарушение ODR, другие - нет. Вам нужно будет определить встроенные функции либо в исходном файле, который их использует (если есть только один), либо заголовок, включенный в каждый файл, который их использует, для того, чтобы это можно было выполнить переносимо. –