템플릿 함수를 사용한 C ++ 템플릿 메타 프로그래밍

vibz

저는 최근에 C ++로 템플릿 메타 프로그래밍을 배우고 있습니다. 계승 계산 예제를 확인한 후 템플릿 클래스가 아닌 템플릿 함수로만 동일한 작업을 수행 할 수 있는지 궁금했습니다. 내 첫 번째 시도는 다음과 같습니다.

#include <stdio.h>
#include <iostream>

using namespace std;

template <int t>
int multiply(t)
{
    return (multiply(t-1) * t);
}

template <>
int multiply(1)
{
    return 1;
}

int main () {
    cout << multiply(5) << endl;
    return 0;

}

하지만 다음과 같은 컴파일러 오류가 발생합니다.

temp.cpp:7: error: template declaration of 'int multiply'
temp.cpp:14: error: expected ';' before '{' token
temp.cpp: In function 'int main()':
temp.cpp:19: error: 'multiply' was not declared in this scope

템플릿 함수를 사용하여 이러한 템플릿 메타 프로그래밍을 할 수 있습니까? 이것이 허용됩니까?

조틱

주석에서 tobi303이 언급했듯이 유형 이름이 아닌 (t)함수의 매개 변수 목록으로 사용하는 t것은 의미가 없습니다.

이후 int t템플릿 파라미터 아닌 일반 파라미터이고, 단지 (사이 템플릿 파라미터리스트에 존재해야 <하고 >각괄호)가 아닌 함수 파라미터 목록 (사이 ()괄호). 템플릿 매개 변수도 코드 multiply<5>()대신에 그대로 전달되어야합니다 multiply(5).

다음과 같이 사용할 수 있습니다.

#include <iostream>

using namespace std;

template <int t>
constexpr int multiply() {
    return multiply<t - 1>() * t;
}

template <>
constexpr int multiply<1>() {
    return 1;
}

int main () {
    cout << multiply<5>() << endl;
    return 0;
}

또한 constexpr컴파일 타임에 이러한 함수를 항상 평가할 수 있도록 (C ++ 11 이상)을 추가 했습니다. 그러나 컴파일러는 런타임이 아닌 컴파일 타임에 이들을 평가하도록 강요되지 않으며 런타임 오버 헤드로 끝날 수 있습니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

인수 디스패치를위한 C ++ 템플릿 메타 프로그래밍

분류에서Dev

C ++ 템플릿 메타 프로그래밍, 구조의 특정 구성원 작업을 수행하기위한 가변 템플릿 사용

분류에서Dev

C ++에서 템플릿 메타 프로그래밍을 사용하여 두 정수의 GCD를 찾습니다.

분류에서Dev

템플릿 메타 프로그래밍으로 C ++ 생성 함수

분류에서Dev

템플릿 클래스의 인스턴스화 된 객체에 대한 C ++ 템플릿 메타 함수

분류에서Dev

C ++ : 템플릿 메타 프로그래밍의 조건

분류에서Dev

Variadic 템플릿을 사용한 템플릿 메타 프로그래밍 : 컴파일러 오류

분류에서Dev

Variadic 템플릿을 사용한 템플릿 메타 프로그래밍 : 컴파일러 오류

분류에서Dev

C ++ 11에서 템플릿 메타 프로그래밍을 사용하여 목록 연결

분류에서Dev

기본 매개 변수가있는 C ++ 템플릿 클래스 및 아마도 메타 프로그래밍

분류에서Dev

클래스 템플릿에서 함수 템플릿을 사용하는 C ++

분류에서Dev

템플릿 함수에 대한 C ++ 템플릿 하위 클래스 인수

분류에서Dev

가변 템플릿을 사용한 태그 캐스팅 메타 함수

분류에서Dev

C ++ 템플릿 메타 프로그래밍 중첩 스위치 문

분류에서Dev

동일한 템플릿 구조 함수 내에서 템플릿 템플릿 매개 변수로 전달되는 C ++ 템플릿 자체 이름

분류에서Dev

피보나치 계산을위한 템플릿 메타 프로그래밍

분류에서Dev

템플릿 메타 프로그래밍에 대한 꼬리 재귀 성능

분류에서Dev

C ++ 템플릿 및 기본 및 하위 클래스를 템플릿 매개 변수로 사용한 캐스팅

분류에서Dev

템플릿을 템플릿 인수로 사용하는 함수

분류에서Dev

가변 템플릿 인수로 C ++ 템플릿 함수 별칭

분류에서Dev

서명 템플릿 클래스를위한 C ++ 템플릿 전문화

분류에서Dev

템플릿 클래스의 템플릿 함수 포인터-C ++

분류에서Dev

템플릿 함수의 C ++ 템플릿 클래스 멤버

분류에서Dev

부분 템플릿 클래스를 특수 템플릿 함수로 사용

분류에서Dev

부분 템플릿 클래스를 특수 템플릿 함수로 사용

분류에서Dev

오류 : '>'앞에 예상되는 primary-expression : 템플릿 화 된 클래스의 템플릿 메서드를 사용하려는 템플릿 함수

분류에서Dev

오류 : '>'앞에 예상되는 primary-expression : 템플릿 화 된 클래스의 템플릿 메서드를 사용하려는 템플릿 함수

분류에서Dev

C ++ 클래스 메서드에 대한 타임 아웃 함수 템플릿 구현

분류에서Dev

C ++ 템플릿을 사용하여 타사 C 코드 래핑

Related 관련 기사

  1. 1

    인수 디스패치를위한 C ++ 템플릿 메타 프로그래밍

  2. 2

    C ++ 템플릿 메타 프로그래밍, 구조의 특정 구성원 작업을 수행하기위한 가변 템플릿 사용

  3. 3

    C ++에서 템플릿 메타 프로그래밍을 사용하여 두 정수의 GCD를 찾습니다.

  4. 4

    템플릿 메타 프로그래밍으로 C ++ 생성 함수

  5. 5

    템플릿 클래스의 인스턴스화 된 객체에 대한 C ++ 템플릿 메타 함수

  6. 6

    C ++ : 템플릿 메타 프로그래밍의 조건

  7. 7

    Variadic 템플릿을 사용한 템플릿 메타 프로그래밍 : 컴파일러 오류

  8. 8

    Variadic 템플릿을 사용한 템플릿 메타 프로그래밍 : 컴파일러 오류

  9. 9

    C ++ 11에서 템플릿 메타 프로그래밍을 사용하여 목록 연결

  10. 10

    기본 매개 변수가있는 C ++ 템플릿 클래스 및 아마도 메타 프로그래밍

  11. 11

    클래스 템플릿에서 함수 템플릿을 사용하는 C ++

  12. 12

    템플릿 함수에 대한 C ++ 템플릿 하위 클래스 인수

  13. 13

    가변 템플릿을 사용한 태그 캐스팅 메타 함수

  14. 14

    C ++ 템플릿 메타 프로그래밍 중첩 스위치 문

  15. 15

    동일한 템플릿 구조 함수 내에서 템플릿 템플릿 매개 변수로 전달되는 C ++ 템플릿 자체 이름

  16. 16

    피보나치 계산을위한 템플릿 메타 프로그래밍

  17. 17

    템플릿 메타 프로그래밍에 대한 꼬리 재귀 성능

  18. 18

    C ++ 템플릿 및 기본 및 하위 클래스를 템플릿 매개 변수로 사용한 캐스팅

  19. 19

    템플릿을 템플릿 인수로 사용하는 함수

  20. 20

    가변 템플릿 인수로 C ++ 템플릿 함수 별칭

  21. 21

    서명 템플릿 클래스를위한 C ++ 템플릿 전문화

  22. 22

    템플릿 클래스의 템플릿 함수 포인터-C ++

  23. 23

    템플릿 함수의 C ++ 템플릿 클래스 멤버

  24. 24

    부분 템플릿 클래스를 특수 템플릿 함수로 사용

  25. 25

    부분 템플릿 클래스를 특수 템플릿 함수로 사용

  26. 26

    오류 : '>'앞에 예상되는 primary-expression : 템플릿 화 된 클래스의 템플릿 메서드를 사용하려는 템플릿 함수

  27. 27

    오류 : '>'앞에 예상되는 primary-expression : 템플릿 화 된 클래스의 템플릿 메서드를 사용하려는 템플릿 함수

  28. 28

    C ++ 클래스 메서드에 대한 타임 아웃 함수 템플릿 구현

  29. 29

    C ++ 템플릿을 사용하여 타사 C 코드 래핑

뜨겁다태그

보관