Wie füge ich extrem lange Literale in C++ - Quellcode?

Ich habe ein bisschen ein problem. Im wesentlichen brauche ich zum speichern einer großen Liste von Whitelist-Einträgen in meinem Programm, und ich würde gerne eine solche Liste direkt -- ich will nicht zu haben, Sie zu verteilen, andere Bibliotheken und so, und ich will nicht zum einbetten des strings in eine Win32-Ressource, für eine Reihe von Gründen, die ich nicht wollen, zu gehen in jetzt.

Ich einfach meine große whitelist in meinem .cpp-Datei, und vorgestellt wurde mit diesem Fehler:

1>ServicesWhitelist.cpp(2807): fatal error C1091: compiler limit: string exceeds 65535 bytes in length

Den string selbst ist etwa das doppelte der erlaubten Grenze von VC++. Was ist der beste Weg, um solche großen Literale in einem Programm?

EDIT:

Ich bin die Speicherung der Zeichenfolge wie diese:

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
Es ist zur Laufzeit verwendet, in einer Weise ähnlich zu diesem:

static const boost::wregex servicesWhitelistRegex(servicesWhitelist);
std::wstring service;
//code to populate service
if (!boost::regex_match(service, servicesWhitelistRegex))
 //Do something to print service
  • Wie speichern Sie die Zeichenfolge? Wie wird es analysiert und gespeichert in einer Reihe?
  • Siehe Frage Bearbeiten
  • Gibt es irgendein Grund, dass es gespeichert werden müssen, in genau diesem format? Es sieht für mich aus wie könnte es besser werden, gespeichert in einem list<> oder so etwas.
  • Wie sehen Sie die bis-Werte in dieser Zeichenkette, meine ich. Auf die run-Zeit, haben Sie analysiert?
  • Wieder bearbeitet. Auch ein C-W.
  • Der Grund, warum ich nicht (momentan) haben, dass ist dann habe ich den overhead von drei Unmenge Anrufe zu mycontainer::push_back, die macht die binäre riesige.
  • warum würden Sie machen es CW?
  • Oh, good grief! Sie sind über das ganze massive Zeichenfolge als einzelnes regex? Das muss alptraumhaft langsam. Ich würde schauen für ein einfacher Algorithmus, ehrlich. Erstellen Sie einen trie aus Ihrer whitelist und match service gegen Sie, zum Beispiel.
  • Es ist ähnlich in der Geschwindigkeit, um die hash-Tabelle Umsetzung landete ich mit. Die Bauzeit war länger, aber nicht wirklich wichtig in dieser Anwendung. In vielen Möglichkeiten, die der regex war schneller als der hash-Tabelle für mehr Leistungen, die nicht in der whitelist, weil der finite-state-Maschine wäre schneller scheitern.
  • Myers: es ist CW, weil ich stumm war, und ein Häkchen in der box 🙁

Schreibe einen Kommentar