📖

C++Builderで可変長引数を試す

2023/06/04に公開

C++Builderは関係しませんが、可変長引数の作り方を試してみました。
テンプレートやLambda式を使っているため、例のごとくClassicコンパイラでは動作しません。

引数に与えた全文字列を結合する

// プロトタイプ宣言
template <class... A>
UnicodeString __fastcall UniStrCat(A...);


// 引数の文字列を結合する関数
Memo1->Clear();
auto GetString = [](auto... args){
	UnicodeString result = "";
	for(UnicodeString arg : std::initiallizer_list<UnicodeString>{args...}){
		result += args;
	}
	return result;
};
Memo1->Lines->Add(GetString("123", "456"));                // "123456"
Memo1->Lines->Add(GetString("123", "456", "789"));         // "123456789"
Memo1->Lines->Add(GetString("123", "456", "789", "012"));  // "123456789012"

参考文献

https://cpprefjp.github.io/lang/cpp11/variadic_templates.html

Discussion