我将 .cpp 文件的扩展 SVN 关键字文字存储在 'static char const *const' 类成员中,并希望尽可能相似地存储 .h 描述。简而言之,我需要保证将静态成员(可能在 .cpp 文件中)的单个实例化为自动生成的非整数文字,该文字存在于可能共享的 .h 文件中。不幸的是,该语言没有尝试解决由在类定义之外进行的赋值导致的多个实例化,并明确禁止类定义内的非整数初始化。我最好的尝试(使用静态包装内部类)并不太脏,但我真的想做得更好。有没有人有办法将下面的包装模板化或有一个完全优越的方法?
// 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 类的静态链接地址问题?分配在类定义之外的外部 char 指针在语言上是有效的,但以与直接成员初始化相同的方式失败。我明白为什么该语言会回避整个解决问题,但是如果提供了一个反向的外部成员限定符会非常方便,其中定义代码在类定义中对任何调用者都是可见的,但实际上只在单个特殊点处被调用在别处声明。
无论如何,我离题了。对于我们所拥有的语言、模板或其他语言,最好的解决方案是什么?谢谢!