私は次のコードを得ました:
ヘッダファイル:
#define html(...) anyHtml(__VA_ARGS__, NULL);
const char* Html::anyHtml(const char* arg, ...);
#define body(cssClass, ...) anyBody(cssClass, __VA_ARGS__, NULL);
const char* Html::anyBody(const char* cssClass, const char* arg, ...);
cpp ファイル:
const char* Html::anyHtml(const char* arg, ...) {
string temp = initOpen + tagToString.at(HTML) + end + lf + lf;
va_list arguments;
for (va_start(arguments, arg); arg != NULL; arg = va_arg(arguments, const char*)) {
temp += arg + lf;
}
va_end(arguments);
temp += deOpen + tagToString.at(HTML) + end + lf;
string *returnThis = new string(temp);
return (*returnThis).c_str();
}
const char* Html::body(const char* cssClass, const char* arg, ...) {
string temp = initOpen + tagToString.at(BODY) + " class=\"" + cssClass + "\"" + end + lf + lf;
va_list arguments;
for (va_start(arguments, arg); arg != NULL; arg = va_arg(arguments, const char*)) {
temp += arg + lf +lf;
}
va_end(arguments);
temp += deOpen + tagToString.at(BODY) + end + lf;
string *returnThis = new string(temp);
return (*returnThis).c_str();
}
メインファイル:
Html *html = new Html();
cout << html -> html("test","test","test");
cout << html -> body("thisClass","test","test");
正常に動作します!!
でもこれは:
Html *html = new Html();
cout << html -> html(
"hello",
html -> body("thisClass","content")
);
うまくいきません..ヘッダーファイルのanyBodyのマクロをアウトコメントすると
//#define body(cssClass, ...) anyBody(cssClass, __VA_ARGS__, NULL);
次のようにできます。
Html *html = new Html();
cout << html -> html(
"hello",
html -> body("thisClass","content",NULL)
);
今私の質問:
次のようないくつかのマクロをネストすることは可能ですか
#define body(cssClass, ...) anyBody(cssClass, __VA_ARGS__, NULL);
彼らの間で?
「可変引数カウント」全体が、今日のcppではまだ実際には設計されていないことを読んだことがありますか?
関数 anyHtml() と anyBody() を見てみましょう。これはこの問題の「良い」解決策ですか、それともある種の汚い初心者ハックですか? ほとんどの場合、perl と Java と一緒に cpp を使用するのはまだ初めてです。
今..十分です:-)
言いたいことを教えてください.. :-)
- - 編集
わかった、ごめん..
Html *html = new Html();
cout << html -> html(
"hello",
html -> body("thisClass","content")
);
出力は
<html>
hello
<body class="thisClass">
content
</body>
</html>
しかし、それは与えます
C2143 Syntax Error missing ')' before ';'
C2143 Syntax Error missing ')' before ';'
C2059 Syntax Error: ')'
私が両方を使用する場合
#define html(...) anyHtml(__VA_ARGS__, NULL);
#define body(cssClass, ...) anyBody(cssClass, __VA_ARGS__, NULL);
私が作れば
cout << html -> html("hello","test");
cout << html -> body("thisClass","content");
これらのエラーは表示されません..
このマクロがなければ、次のように入力する必要があります:
cout << html -> html(
"hello",
html -> body("thisClass","content",NULL)
);
私が知っている非常に特別な.. :-(
- - 編集
私の問題を解決してくれてありがとう!
マクロ定義のセミコロンは、ネストの問題を解決しました...
関数 anyHtml() と body() はどうですか...
を使用して正しいですか
string temp = ...
文字列操作の後にキャストしますか?
それとも汚れていますか?