我正在“static char const*const”类成员中存储.cpp文件的扩展svn关键字文本,并希望尽可能地存储.h描述。简言之,我需要保证静态成员(可能在.cpp文件中)的单个实例化到一个可能共享的.h文件中的自动生成的非整数文本。不幸的是,语言没有尝试解析由类定义外部的赋值产生的多个实例化,并且在类定义内部显式地禁止非整数inits。我的最佳尝试(使用静态包装内部类)不是太脏,但我真的希望做得更好。是否有人有一种方法来模板下面的包装,或者有一个完全优越的方法?
// Foo.h: class with .h/.cpp SVN info stored and logged statically
class Foo {
static Logger const verLog;
struct hInfoWrap;
public:
static hInfoWrap const hInfo;
static char const *const cInfo;
};
// Would like to eliminate this per-class boilerplate.
struct Foo::hInfoWrap {
hInfoWrapper() : text("$Id$") { }
char const *const text;
};
…
// Foo.cpp: static inits called here
Foo::hInfoWrap const Foo::hInfo;
char const *const Foo::cInfo = "$Id$";
Logger const Foo::verLog(Foo::cInfo, Foo::hInfo.text);
…
// Helper.h: output on construction, with no subsequent activity or stored fields
class Logger {
Logger(char const *info1, char const *info2) {
cout << info0 << endl << info1 << endl;
}
};
有没有一种方法可以解决静态链接地址问题,以便在字符串文本上模板化hinfowrap类?在类定义之外分配的外部字符指针在语言上是有效的,但在本质上失败的方式与直接成员初始化相同。我明白了语言为什么回避整个解决方案问题,但是如果提供了一个倒置的外部成员限定符(extern member qualifier),那么非常方便,其中定义代码在类定义中对任何调用方都可见,但实际上只在其他地方的单个特殊声明点调用。
不管怎样,我离题了。对于我们现有的语言,模板或其他语言,什么是最好的解决方案?谢谢!