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>
다른 대안: 생성기
주로 유형을 명시적으로 지정하지 않는 방법을 찾고 있는 경우 , 생성기 함수는 실행 가능한 솔루션이 될 수 있습니다:
<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 중국어 웹사이트의 기타 관련 기사를 참조하세요!