Can You Mimic Template
C のテンプレート メタプログラミング機能を使用すると、開発者は強力で効率的なコードを作成できます。ただし、特定のシナリオでは、引数をテンプレートに渡すのが面倒になる場合があります。次のコードを考えてみましょう:
<code class="cpp">struct Foo { template<class T, T X> void bar() { // do something with X, compile-time passed } }; struct Baz { void bang() {} }; int main() { Foo f; f.bar<int, 5>(); f.bar<decltype(&Baz::bang), &Baz::bang>(); }</code>
この例では、型を明示的に指定し、実際の値を引数としてテンプレート バーに渡す必要があります。
この構文を簡略化することは可能ですか? ?次のように表現できますか:
<code class="cpp">struct Foo { template<auto X> void bar() { // do something with X, compile-time passed } }; struct Baz { void bang() {} }; int main() { Foo f; f.bar<5>(); f.bar<&Baz::bang>(); }</code>
答え:
残念ながら、C にはこの構文を実現する直接的な方法がありません。最も近い代替案は マクロ:
<code class="cpp">#define AUTO_ARG(x) decltype(x), x f.bar<AUTO_ARG(5)>(); f.bar<AUTO_ARG(&Baz::bang)>();</code>
別の代替案: Generators
主に型の明示的な指定を避ける方法を探している場合、ジェネレーター関数が実行可能な解決策になります:
<code class="cpp">template <typename T> struct foo { foo(const T&) {} // do whatever }; template <typename T> foo<T> make_foo(const T& x) { return foo<T>(x); }</code>
次のように書く代わりに:
<code class="cpp">foo<int>(5);</code>
を使用できます:
<code class="cpp">make_foo(5);</code>
これにより、引数の型が許可されます推測してコードを簡素化します。このアプローチはテンプレート
以上がC に同等の「テンプレート」はありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。