J'ai un petit problème. Essentiellement, je dois stocker une grande liste d'entrées de la liste blanche dans mon programme, et je voudrais inclure une telle liste directement - je ne veux pas avoir à distribuer d'autres bibliothèques et autres, et je ne veux pas intégrer les chaînes dans une ressource Win32, pour un tas de raisons que je ne veux pas entrer dans le moment.Comment inclure des littéraux extrêmement longs dans une source C++?
J'ai simplement inclus mon grand whitelist dans mon dossier Cpp, et a été présenté avec cette erreur:
1>ServicesWhitelist.cpp(2807): fatal error C1091: compiler limit: string exceeds 65535 bytes in length
La chaîne elle-même est environ deux fois cette limite permise par VC++. Quelle est la meilleure façon d'inclure un tel littéral dans un programme?
EDIT:
Je stocker la chaîne comme ceci:
const std::wstring servicesWhitelist
(
L".NETFRAMEWORK|"
L"_IOMEGA_ACTIVE_DISK_SERVICE_|"
L"{6080A529-897E-4629-A488-ABA0C29B635E}|"
L"{834170A7-AF3B-4D34-A757-E05EB29EE96D}|"
L"{85CCB53B-23D8-4E73-B1B7-9DDB71827D9B}|"
L"{95808DC4-FA4A-4C74-92FE-5B863F82066B}|"
L"{A7447300-8075-4B0D-83F1-3D75C8EBC623}|"
L"{D31A0762-0CEB-444E-ACFF-B049A1F6FE91}|"
L"{E2B953A6-195A-44F9-9BA3-3D5F4E32BB55}|"
L"{EDA5F5D3-9E0F-4F4D-8A13-1D1CF469C9CC}|"
L"2WIREPCP|"
//About 3800 more lines
);
EDIT2 Il est utilisé lors de l'exécution d'une manière similaire à ceci:
static const boost::wregex servicesWhitelistRegex(servicesWhitelist);
std::wstring service;
//code to populate service
if (!boost::regex_match(service, servicesWhitelistRegex))
//Do something to print service
Comment entreposez-vous la chaîne? Comme, est-il analysé et stocké dans un ensemble? – GManNickG
@GMan: Voir question éditer –
Y at-il une raison pour laquelle il doit être stocké exactement dans ce format? Il me semble que cela pourrait être mieux stocké dans une 'list <>' ou quelque chose comme ça. – greyfade