В какую единицу перевода будут помещены статические объекты?
Как только вы учли тот факт, что статика должна быть размещена в одном (и только одном) ТУ, переходить на нее не очень сложно.до конца и присвойте им значения в функции:
// .h
class sample
{
public:
static int some_integer;
static std::vector<std::string> strings;
};
//.cpp
// we'd need this anyway
int sample::some_integer;
std::vector<std::string> sample::strings;
// add this for complex setup
struct sample_init {
sample_init() {
sample::some_integer = 100;
sample::strings.push_back("stack");
sample::strings.push_back("overflow");
}
} x;
Если вы действительно хотите, чтобы код для sample_init
появился в определении класса sample
, то вы могли бы даже поместитьэто там как вложенный класс.Вам просто нужно определить его экземпляр в том же месте, где вы определяете статику (и после они были инициализированы через свои конструкторы по умолчанию, в противном случае, конечно, вы не можете push_back
ничего).
C # был изобретен через 15-20 лет после C ++ и имеет совершенно другую модель сборки.Неудивительно, что он предлагает различные функции и некоторые вещи в C ++ менее просты, чем в C #.
C ++ 0x добавляет функции, упрощающие инициализацию векторов с некоторыми данными, называемыми "списки инициализаторов "