10 Stimmen

C++-Makro zur Umwandlung einer Zeichenkette in eine Liste von Zeichen

Ist es möglich, ein Makro zu haben, um zu haben:

CHAR_LIST(Huhn)

zu erweitern:

c", "h", "i", "c", "k", "e", "n

[Grund, warum ich es will: weil selbst für mittelgroße Strings, ein Makro ist enorm bequemer als manuell zu erweitern. Und der Grund, den ich brauche, um zu erweitern, ist die Übergabe einer Zeichenfolge an eine varidiac-Vorlage]

9voto

Aaron McDaid Punkte 25409

Aktualisierung durch den Antwortenden, Juli 2015: Anhand der obigen Kommentare zur Frage selbst können wir erkennen, dass es bei der eigentlichen Frage nicht um Makros an sich ging. Das eigentliche Problem, das der Fragesteller lösen wollte, war die Möglichkeit, eine Zeichenkette an eine Vorlage zu übergeben, die eine Reihe von Zeichen als Nicht-Typ-Vorlagenargumente akzeptiert. Hier ist eine ideone Demo einer Lösung für dieses Problem. Die dortige Implementierung erfordert C++14, aber es ist einfach, sie in C++11 zu konvertieren.

------------

Ich denke, wir brauchen ein deutlicheres Beispiel dafür, wie dieses Makro verwendet werden soll. Wir brauchen ein Beispiel für die variadische Vorlage. (Ein anderes Update : Diese Funktioniert nicht funktioniert bei mir unter g++ 4.3.3 in einer variadischen Vorlage nicht, selbst wenn die c++0x-Unterstützung aktiviert ist, aber ich denke, es könnte trotzdem interessant sein).

#include<iostream> // http://stackoverflow.com/questions/6190963/c-macro-to-convert-a-string-to-list-of-characters
#include "stdio.h"

using namespace std;

#define TO_STRING(x) #x
#define CHAR_LIST_7(x)   TO_STRING(x)[0] \
                       , TO_STRING(x)[1] \
                       , TO_STRING(x)[2] \
                       , TO_STRING(x)[3] \
                       , TO_STRING(x)[4] \
                       , TO_STRING(x)[5] \
                       , TO_STRING(x)[6] \

int main() {
        cout << TO_STRING(chicken) << endl;
        printf("%c%c%c%c%c%c%c", CHAR_LIST_7(chicken));
}

Die Linie, die d ist das, woran Sie interessiert sind. Ich habe weitere Beispiele angefügt, um zu zeigen, wie es aufgebaut ist. Ich bin neugierig auf @GMan's Link, um den Zählprozess zu automatisieren.

2voto

Blindy Punkte 59463

Nein, tut mir leid, das ist nicht möglich. Es gibt keine Operation, um eine Zeichenkette in Zeichen zu zerlegen. Am ehesten könnte man das durch rekursive Metaprogrammierung erreichen, aber dann erhält man das Array als Objekt und nicht die tatsächliche Textdarstellung.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X