C++ 在.h文件中调用init()函数
我希望能够从另一个C++ 在.h文件中调用init()函数,c++,c++11,header-files,C++,C++11,Header Files,我希望能够从另一个.h文件中包含的.h文件调用init()函数,如下所示: T1.h: T2.h: 正确的方法是什么?您是否希望调用T1::init()的次数与调用T2的次数相同。h包含在某个地方?为什么呼叫必须在标题中?练习的最终目标是什么?看起来很像。请查看您的编译器是否支持#pragma startup。如果是这样,您可以在一个独立函数中调用init(),该函数在程序启动时调用#pragma。否则,您可以在T2.h中声明的静态类/结构变量的构造函数中调用init()(最好在T2.cpp中声
.h
文件中包含的.h
文件调用init()
函数,如下所示:
T1.h:
T2.h:
正确的方法是什么?您是否希望调用
T1::init()
的次数与调用T2的次数相同。h
包含在某个地方?为什么呼叫必须在标题中?练习的最终目标是什么?看起来很像。请查看您的编译器是否支持#pragma startup
。如果是这样,您可以在一个独立函数中调用init()
,该函数在程序启动时调用#pragma
。否则,您可以在T2.h中声明的静态类/结构变量的构造函数中调用init()
(最好在T2.cpp中声明)。@agg212:您误解了头保护是什么。它们仅防止在单个翻译单元内多次处理标题。它们不会阻止标题作为一个整体在项目中被多次处理。您可以让多个.cpp文件(in)直接包含T2.h,因此每次都会重新处理它,从而多次调用init()。对于您正在尝试的内容,听起来您需要在程序启动时调用一个singleton来注册您需要的所有内容。嗯,最终会有人包含这些头,对吗?库可能只是标题,但使用库的程序不是。直到现在我才认为在这样的标题中调用方法是合法的。然而,在我看来,这仍然是个坏主意。您是否可以在T2的构造函数(或其他一些init方法)中调用T1::init()
,并向T1添加一些逻辑以确保它实际上不会多次初始化?
#ifndef T1_H
#define T1_H
class T1 {
static void init() {...}
...
};
#endif
#ifndef T2_H
#define T2_H
#include "T1.h"
class T2 {
...
};
T1::init();
#endif