我想做什么:每当该类的实例将在程序中使用时,运行一些必备代码。这段代码将检查requiremts等,并且应该只运行一次。构造函数中的静态变量,是否有任何缺点或副作用?
我发现这可以通过在构造函数中使用另一个对象作为静态变量来实现。下面是一个更好的画面一个例子:
class Prerequisites
{
public:
Prerequisites() {
std::cout << "checking requirements of C, ";
std::cout << "registering C in dictionary, etc." << std::endl;
}
};
class C
{
public:
C() {
static Prerequisites prerequisites;
std::cout << "normal initialization of C object" << std::endl;
}
};
让我困扰的是,我还没有看到类似用途的静态变量至今。是否有任何缺点或副作用或我错过了什么?或者也许有更好的解决方案?欢迎任何建议。
我认为你应该重新考虑你的设计,而不是将任何prereq作为参数传递给构造函数。它使你的类的用户更加清楚依赖。 – 2010-05-29 23:22:47
@Anders K:这不是关于类用户的选择,而是关于测试运行时环境。更具体地说,我想要例如检查C类将使用的可用OpenGL扩展。无论何时需要的扩展程序不可用,程序都会打印出错信息并退出。 – doc 2010-05-29 23:31:19
我的意思是使用你的课程的用户(程序员)。更清楚的是,构造函数是否需要知道可用的opengl扩展,然后在幕后静静地进行。 – 2010-05-29 23:37:39