c++ - 程序启动时立即运行的 C++ 代码
问题描述
struct First{
First(){
printf("first");
}
}First;
int main()
{
print("second");
return 0;
}
我知道我可以通过结构控制首先执行的代码。
所以我想用下面的代码通过宏使它变得简单。
#define FIRST_INVOKE(NAME,FUNCTION) \
struct NAME \
{ \
NAME() \
{ \
FUNCTION(); \
} \
} NAME;
namespace Foo
{
namespace Bar
{
void FirstFunction()
{
LOGD(LVID, "First");
}
}
}
FIRST_INVOKE(UniqueStructName, Foo::Bar::FirstFunction);
创建宏时,必须指定结构的名称。(UniqueStructName)
我想将其设置为不会自动全局重叠的名称。
命名空间和类静态函数不能包含在结构名称中,因为 :: 是必需的。
请让我知道是否有好的方法(我正在使用 Xcode。)
解决方案
您可以根据行号自动生成名称并使用匿名命名空间来避免跨文件的多个定义。例如,使用以下宏:
#define CONCAT_(A,B) A##B
#define CONCAT(A,B) CONCAT_(A,B)
#define NONAME() CONCAT(noname_, __LINE__)
#define FIRST_INVOKE(FUNCTION) \
namespace { \
struct NONAME() \
{ \
NONAME()() \
{ \
FUNCTION(); \
} \
} NONAME(); \
}
这将扩展为一个noname_X
结构,其中X
是行号。只要您不在同一行上重复宏,这将起作用。
推荐阅读
- javascript - 为什么我在导入模块时变得不确定
- python - 检查是否已将关注者添加到我的 Twitter 帐户
- react-native - 在 React Native 中使用 ScrollTo 的 FlatList
- typescript - 为道具使用联合类型值时,类型保护失败
- c# - 为什么靠近箱子时箱子会不停地打开/关闭?
- python - 重构python函数的最佳方法
- swift - “某些协议”导致类型不符合协议
- python - 如何使用 Python 访问具有相同类名的第二个元素
- python - 如何将 args 传递给 python shell
- mule - 执行游标“jconnect_implicit_1”在具有多个 SQL 语句的过程上声明