На момент написания статьи октябрь 2014 г. - так вот современное решение. Пишу решение в виде Node Module и включаю тест с использованием Mocha и Chai, а также underscoreJS. Вы можете легко их игнорировать и просто взять код Enum, если хотите.
Видел много постов с чрезмерно запутанными библиотеками и т. Д. Решение получить поддержку enum в Javascript настолько простое, что действительно не нужно. Вот код:
Файл: enums.js
_ = require('underscore');
var _Enum = function () {
var keys = _.map(arguments, function (value) {
return value;
});
var self = {
keys: keys
};
for (var i = 0; i < arguments.length; i++) {
self[keys[i]] = i;
}
return self;
};
var fileFormatEnum = Object.freeze(_Enum('CSV', 'TSV'));
var encodingEnum = Object.freeze(_Enum('UTF8', 'SHIFT_JIS'));
exports.fileFormatEnum = fileFormatEnum;
exports.encodingEnum = encodingEnum;
И тест для иллюстрации того, что он вам дает:
file: enumsSpec.js
var chai = require("chai"),
assert = chai.assert,
expect = chai.expect,
should = chai.should(),
enums = require('./enums'),
_ = require('underscore');
describe('enums', function () {
describe('fileFormatEnum', function () {
it('should return expected fileFormat enum declarations', function () {
var fileFormatEnum = enums.fileFormatEnum;
should.exist(fileFormatEnum);
assert('{"keys":["CSV","TSV"],"CSV":0,"TSV":1}' === JSON.stringify(fileFormatEnum), 'Unexpected format');
assert('["CSV","TSV"]' === JSON.stringify(fileFormatEnum.keys), 'Unexpected keys format');
});
});
describe('encodingEnum', function () {
it('should return expected encoding enum declarations', function () {
var encodingEnum = enums.encodingEnum;
should.exist(encodingEnum);
assert('{"keys":["UTF8","SHIFT_JIS"],"UTF8":0,"SHIFT_JIS":1}' === JSON.stringify(encodingEnum), 'Unexpected format');
assert('["UTF8","SHIFT_JIS"]' === JSON.stringify(encodingEnum.keys), 'Unexpected keys format');
});
});
});
Как видите, вы получаете фабрику Enum, вы можете получить все ключи, просто вызвав enum.keys, и вы можете сопоставить сами ключи с целочисленными константами. И вы можете повторно использовать фабрику с другими значениями и экспортировать сгенерированные Enums, используя модульный подход Node.
Еще раз, если вы обычный пользователь или в браузере и т. Д., Просто возьмите заводскую часть кода, потенциально удалив также библиотеку подчеркивания, если вы не хотите использовать ее в своем коде.
Взгляните на Wt .
Wt (произносится как «остроумие») - это C ++ библиотека и сервер приложений для разработка и развертывание сети Приложения. Это не каркас, который обеспечивает способ программирования, но библиотеку.
API ориентирован на виджеты, и вдохновлен существующим C ++ Graphical API пользовательского интерфейса (GUI). К разработчик, он предлагает полный абстракция любого веб-ориентированного детали реализации, включая обработка событий и поддержка графики.
Однако это не бесплатно для коммерческого использования.
Используйте веб-фреймворк C ++, например CppCMS , если вам нравится веб-интерфейс разработка, ориентирована на высокую производительность и работает с.
Обеспечивает:
Вы можете попробовать Wt , но это намного больше как написание графического интерфейса пользователя с помощью браузера, а не традиционного инструмента веб-разработки.
Я говорю это как разработчик на C ++ ...
Я бы, наверное, подумал об использовании Java вместо . Поскольку для этого гораздо чаще используется Java, вы найдете гораздо больше существующих библиотек для использования. Если вы когда-нибудь захотите нанять больше людей, вам будет легче найти разработчиков веб-приложений на Java, чем разработчиков веб-приложений на C ++.
Если вы настаиваете на использовании C ++, посетите:
Как можно преодолеть такие проблемы, как сеансы, постоянство, переключение контекста, многопоточность и т. д. с C ++?
Ответ такой, как вы ожидаете:
Вы можете использовать библиотеки Qt framework, Boost и Poco для веб-разработки на C ++. Qt & Poco поддерживает БД для различных СУБД. Вы можете изучить Axis C ++, если вам нужно разрабатывать веб-сервисы на C ++. ClearSilver имеет библиотеку C для обработки CGI, и вы можете использовать C ++ поверх нее. У вас большой выбор!
Посмотрите на Snorkel Embedded Web Server SDK. Он прост в использовании и создает самые быстрые решения для веб-приложений. http://sites.google.com/site/snorkelembedded