我有以下情况 我有一个.cpp文件(我需要在Objective-C ++ .mm中实际使用它们):
#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;
}
然后我在另一个.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;
}
}
我需要在每个帧调用的Update循环中调用这些函数。这是最佳解决方案吗?这些实际上是否会在没有任何运行时开销的情况下内联?
编辑:生产编译器是Clang for iOS。
答案 0 :(得分:0)
这是最佳解决方案吗?
没有。必须在使用它们的每个翻译单元中定义内联函数,无论它们是否具有外部链接(默认情况下它们将是这样,而无需指定extern
)。出于这个原因,您的代码会给我一个链接错误。
这些实际上是否会在没有任何运行时开销的情况下内联?
这取决于编译器。短inline
个函数(必须在与调用相同的单元中定义)通常是;如果编译器支持链接时优化,则只能内联其他翻译单元中的函数。