我將'.cpp'文件的擴展SVN關鍵字文字存儲在'static char const * const'類成員中,並且希望儘可能相似地存儲.h說明。簡而言之,我需要保證一個靜態成員(大概是一個.cpp文件)的一個實例化到一個生成在一個可能共享的.h文件中的自動生成的非整數文字。不幸的是,該語言不會嘗試解析由在類定義之外作出的賦值而產生的多個實例化,並且明確禁止在類定義中使用非整數的inits。我最好的嘗試(使用靜態包裝內部類)並不太髒,但我真的想做得更好。有沒有人有辦法模仿下面的包裝或有一個完全優越的方法?靜態類成員的定義初始化的最佳替代方法? (用於SVN關鍵字)
// 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成員限定符,它會非常方便,其中定義代碼在類定義中對任何調用者都是可見的,但僅在單個特殊點處實際調用在別處宣佈
無論如何,我離題了。什麼是我們擁有的語言,模板或其他方式的最佳解決方案?謝謝!
我完全忘記了類內定義的靜態方法定義是合法的。這是我最終會使用的。謝謝! – Jeff 2010-05-07 18:05:24