通过自动类型推断模拟模板继承
使用 auto 自动指定模板参数的能力将在显式键入的情况下提供方便的快捷方式完整的类型可能是乏味或复杂的。然而,需要注意的是,C 目前不支持 template
使用宏方便的参数传递
作为一种解决方法,可以利用宏来模拟自动类型推断。考虑以下示例:
<code class="cpp">#define AUTO_ARG(x) decltype(x), x Foo f; f.bar<AUTO_ARG(5)>(); // Equivalent to f.bar<int, 5>() f.bar<AUTO_ARG(&Baz::bang)>(); // Equivalent to f.bar<decltype(&Baz::bang), &Baz::bang>()</code>
虽然这种方法可以简化调用语法,但它引入了潜在的陷阱并且需要显式宏调用。
利用模板生成器进行自动推导
另一种解决方案涉及创建模板生成器函数:
<code class="cpp">template <typename T> struct foo { foo(const T&) {} // Perform specific actions }; 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); // Deduces and creates foo<int>(5)</code>
以上是自动类型推断可以模拟 C 中的模板继承吗?的详细内容。更多信息请关注PHP中文网其他相关文章!