你能模仿模板
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>
另一个替代方案:生成器
如果您主要寻求一种避免显式指定类型的方法,生成器函数可以是一个可行的解决方案:
<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>
这允许参数类型进行推导,简化代码。请注意,此方法并不直接模拟 template
以上是C 中有等价的“模板”吗?的详细内容。更多信息请关注PHP中文网其他相关文章!