C ++ 템플릿, 템플릿 매개 변수를 다른 템플릿 매개 변수에 매핑하는 방법

Matthias_buehlmann

어떻게 든 템플릿 매개 변수의 맵을 만들 수 있습니까? 다음과 같은 기능이 있다고 가정 해 보겠습니다.

template<typename T>
T SumCoefficients(const std::vector<T>& coeffs) {
  T sum = static_cast<T>(0);
  for(int i=0; i<100; ++i) {
    sum += SomeFunc<T>(i) * coeffs[i];
  }
  return sum;
}

// explicit instantiation

template double SumCoefficients(const std::vector<double>& coeffs);
template float SumCoefficients(const std::vector<float>& coeffs);
template Vector3d SumCoefficients(const std::vector<Vector3d >& coeffs);

이제 호출하고 싶지 SomeFunc<T>(i)않지만 대신 T == float이면을 사용 SomeFunc<float>하고 T == double SomeFunc<double>이면 사용 하고 싶지만 T == Vector3d이면 사용하고 싶지 SomeFunc<Vector3d>않지만 대신 사용하고 싶습니다.SomeFunc<double>

이제는 물론 명시 적으로 구현 template <> Vector3d SumCoefficients(std::vector<Vector3d > coeffs) { ... }한 다음를 명시 적으로 호출 할 수 SomeFunc<double>있지만 단일 템플릿 구현과 명시 적 인스턴스화만으로 동일한 결과를 제공하는 우아한 방법이 있는지 궁금합니다.

플로레스탄

접근 방식이 괜찮은 경우 constexpr이지만 SomeFunc코드 기반에 대한 호출이 많은 경우 선호하는 다른 솔루션을 추가하고 싶습니다 .

내 솔루션의 또 다른 장점은 매핑 논리가 호출 코드가 아니라 템플릿 전문화에 캡슐화되어 있기 때문에 유형이 많거나 나중에 유형을 추가 할 수 있어야하는 경우 더 잘 확장된다는 것입니다.

의미 론적으로 원하는 것은 다음과 같은 스칼라 유형이라고 가정합니다 T.

template<typename T>
struct scalar_type {

    using type = T;
};

template<typename T>
using scalar_t = typename scalar_type<T>::type;

이제 모든 유형의 벡터 또는 행렬 또는 필요한 모든 항목에 대해이 템플릿의 구분을 추가 할 수 있습니다.

template<>
struct scalar_type<Vector3d> {

    using type = double;
};

호출 코드는 다음과 같습니다.

template<typename T>
auto SumCoefficients(const std::vector<T>& coeffs) {
  scalar_t<T> sum;
  for(int i=0; i<100; ++i) {
    sum += SomeFunc<scalar_t<T>>(i) * coeffs[i];
  }
  return sum;
}

C ++ 11로 제한된 경우 호출 사이트는 다음과 같을 수 있습니다.

template<typename T, typename Scalar = scalar_t<T>>
Scalar SumCoefficients(const std::vector<T>& coeffs) {
  Scalar sum;
  for(int i=0; i<100; ++i) {
    sum += SomeFunc<Scalar>(i) * coeffs[i];
  }
  return sum;
}

여기에서 전체 예보기

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

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

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

템플릿을 평가하는 C ++ 템플릿 매개 변수 (템플릿 템플릿 매개 변수)

분류에서Dev

한 템플릿에서 다른 템플릿으로 가변 매개 변수를 전달하는 방법

분류에서Dev

다른 템플릿의 매개 변수로서의 템플릿 매개 변수

분류에서Dev

C ++ 비 형식 템플릿 템플릿 매개 변수, * this 참조

분류에서Dev

C ++ 템플릿 압축 매개 변수

분류에서Dev

Azure ARM 템플릿-연결된 템플릿의 출력 변수를 매개 변수로 다른 템플릿에 전달하는 방법은 무엇입니까?

분류에서Dev

템플릿 템플릿 매개 변수의 템플릿 매개 변수 사용

분류에서Dev

한 템플릿 선언의 기본 템플릿 매개 변수를 다른 템플릿에 사용

분류에서Dev

다른 템플릿의 템플릿 매개 변수에 액세스

분류에서Dev

다른 매개 변수에 따라 중첩 된 템플릿 클래스 인스턴스를 기본 템플릿 매개 변수로 설정하는 방법

분류에서Dev

가변 템플릿 템플릿 : 매개 변수 팩에는 유형 템플릿이 필요합니다.

분류에서Dev

C ++에서 템플릿 매개 변수로 템플릿 생성자를 만들 수 없습니다.

분류에서Dev

템플릿 함수가 매개 변수 팩을 사용할 때 다른 템플릿 매개 변수를 전달하는 방법은 무엇입니까?

분류에서Dev

"템플릿 템플릿 매개 변수의 템플릿 인수는 클래스 템플릿 또는 유형 별칭 템플릿이어야합니다."

분류에서Dev

템플릿 클래스가 매개 변수 팩을 사용할 때 다른 템플릿 매개 변수를 전달하는 방법은 무엇입니까?

분류에서Dev

현재 클래스 템플릿을 다른 템플릿의 템플릿 매개 변수로 사용하는 방법은 무엇입니까?

분류에서Dev

템플릿에서 템플릿 매개 변수 유형 결정

분류에서Dev

Azure DevOps 템플릿에서 템플릿 매개 변수 인쇄

분류에서Dev

템플릿 매개 변수에 대한 템플릿 전문화

분류에서Dev

템플릿 템플릿 매개 변수를 사용한 순방향 경사

분류에서Dev

템플릿의 Structs를 매개 변수로 사용하는 방법 C ++

분류에서Dev

템플릿 매개 변수를 만드는 방법

분류에서Dev

템플릿 템플릿 매개 변수 시나리오

분류에서Dev

템플릿 비 유형 템플릿 매개 변수

분류에서Dev

부울 트릭 및 템플릿 템플릿 매개 변수

분류에서Dev

템플릿의 기본 매개 변수-> 템플릿 인수에 템플릿 매개 변수가 포함됨

분류에서Dev

Cloudformation의 기본 템플릿에서 하위 템플릿으로 매개 변수를 보내는 방법

분류에서Dev

템플릿 템플릿 (+ 템플릿) 매개 변수의 내부 템플릿을 지정하지 않은 상태로 두는 방법

분류에서Dev

비 유형 템플릿 매개 변수

Related 관련 기사

  1. 1

    템플릿을 평가하는 C ++ 템플릿 매개 변수 (템플릿 템플릿 매개 변수)

  2. 2

    한 템플릿에서 다른 템플릿으로 가변 매개 변수를 전달하는 방법

  3. 3

    다른 템플릿의 매개 변수로서의 템플릿 매개 변수

  4. 4

    C ++ 비 형식 템플릿 템플릿 매개 변수, * this 참조

  5. 5

    C ++ 템플릿 압축 매개 변수

  6. 6

    Azure ARM 템플릿-연결된 템플릿의 출력 변수를 매개 변수로 다른 템플릿에 전달하는 방법은 무엇입니까?

  7. 7

    템플릿 템플릿 매개 변수의 템플릿 매개 변수 사용

  8. 8

    한 템플릿 선언의 기본 템플릿 매개 변수를 다른 템플릿에 사용

  9. 9

    다른 템플릿의 템플릿 매개 변수에 액세스

  10. 10

    다른 매개 변수에 따라 중첩 된 템플릿 클래스 인스턴스를 기본 템플릿 매개 변수로 설정하는 방법

  11. 11

    가변 템플릿 템플릿 : 매개 변수 팩에는 유형 템플릿이 필요합니다.

  12. 12

    C ++에서 템플릿 매개 변수로 템플릿 생성자를 만들 수 없습니다.

  13. 13

    템플릿 함수가 매개 변수 팩을 사용할 때 다른 템플릿 매개 변수를 전달하는 방법은 무엇입니까?

  14. 14

    "템플릿 템플릿 매개 변수의 템플릿 인수는 클래스 템플릿 또는 유형 별칭 템플릿이어야합니다."

  15. 15

    템플릿 클래스가 매개 변수 팩을 사용할 때 다른 템플릿 매개 변수를 전달하는 방법은 무엇입니까?

  16. 16

    현재 클래스 템플릿을 다른 템플릿의 템플릿 매개 변수로 사용하는 방법은 무엇입니까?

  17. 17

    템플릿에서 템플릿 매개 변수 유형 결정

  18. 18

    Azure DevOps 템플릿에서 템플릿 매개 변수 인쇄

  19. 19

    템플릿 매개 변수에 대한 템플릿 전문화

  20. 20

    템플릿 템플릿 매개 변수를 사용한 순방향 경사

  21. 21

    템플릿의 Structs를 매개 변수로 사용하는 방법 C ++

  22. 22

    템플릿 매개 변수를 만드는 방법

  23. 23

    템플릿 템플릿 매개 변수 시나리오

  24. 24

    템플릿 비 유형 템플릿 매개 변수

  25. 25

    부울 트릭 및 템플릿 템플릿 매개 변수

  26. 26

    템플릿의 기본 매개 변수-> 템플릿 인수에 템플릿 매개 변수가 포함됨

  27. 27

    Cloudformation의 기본 템플릿에서 하위 템플릿으로 매개 변수를 보내는 방법

  28. 28

    템플릿 템플릿 (+ 템플릿) 매개 변수의 내부 템플릿을 지정하지 않은 상태로 두는 방법

  29. 29

    비 유형 템플릿 매개 변수

뜨겁다태그

보관