>  기사  >  백엔드 개발  >  C에 해당하는 `템플릿`이 있습니까?

C에 해당하는 `템플릿`이 있습니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-11-06 05:26:02254검색

Is There a `template` Equivalent in C  ?

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&amp;) {} // do whatever
};

template <typename T>
foo<T> make_foo(const T&amp; x) {
    return foo<T>(x);
}</code>

다음을 작성하는 대신:

<code class="cpp">foo<int>(5);</code>

다음을 사용할 수 있습니다:

<code class="cpp">make_foo(5);</code>

이것은 인수 유형을 허용합니다 추론하여 코드를 단순화합니다. 이 접근 방식은 템플릿 구문이지만 템플릿에 인수를 전달하는 편리한 대안을 제공합니다.

위 내용은 C에 해당하는 `템플릿`이 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.