libc ++でGCCの実装されていない常にインライン化された可変個引数関数をバイパスする試みで、可変個引数テンプレート(snprintf、より正確には* _lバリアントなど)を可変個引数テンプレートでラップして、同様の効果を実現できると思いました。インスタンス化により、可変個引数関数のvarargsが入力され、関数を適切にインライン化できるようになります。問題は、可変個引数テンプレートを作成することについて最初にわからないことです。また、テンプレートの引数を個別の引数に変換する方法も確かにわかりません。
置き換えようとしているコードは次の形式です。
int __sprintf_l(char *__s, locale_t __l, const char *__format, ...) {
va_list __va;
va_start(__va, __format);
int __res = vsprintf_l(__s, __l, __format, __va);
va_end(__va);
return __res;
}
置き換えたいのは、次の形式のものです。
template<typename... Args>
int __sprintf_l(char *__s, locale_t __l, const char *__format, Args... args) {
int __res = vsprintf_l(__s, __l, __format, args...);
return __res;
}
args...
に変換できない拡張が原因で、これは機能していtype
ませんva_list {aka char*}
。方法がない場合は、ハワードを信頼し、1つおよび2つの引数の常にインラインのテンプレートを実装する必要があります。これにより、必要なコードの量が実質的に2倍になります。
編集:おそらくそれをva_listに変換する方法std::tuple
はargs
ここで機能しますか?