C ++ 템플릿 함수를 인수로 전달하는 규칙을 찾고 있습니다.
이것은 C ++에서 지원하는 예제입니다.
#include <iostream>
void add1(int &v)
{
v+=1;
}
void add2(int &v)
{
v+=2;
}
template <void (*T)(int &)>
void doOperation()
{
int temp=0;
T(temp);
std::cout << "Result is " << temp << std::endl;
}
int main()
{
doOperation<add1>();
doOperation<add2>();
}
그러나이 기술에 대해 배우기는 어렵습니다. "템플릿 인수로서의 기능"에 대한 인터넷 검색은 그다지 중요하지 않습니다. 그리고 고전적인 C ++ Templates The Complete Guide도 놀랍게도 토론하지 않습니다 (적어도 내 검색은 아닙니다).
내가 가진 질문은 이것이 유효한 C ++ (또는 널리 지원되는 확장)인지 여부입니다.
또한 이러한 종류의 템플릿 호출 중에 동일한 서명을 가진 functor를 명시 적 함수와 호환 가능하게 사용할 수있는 방법이 있습니까?
구문이 틀리기 때문에 다음 프로그램은 적어도 Visual C ++ 에서 작동 하지 않습니다 . 사용자 정의 비교 연산을 정의하려는 경우 함수 포인터 또는 functor를 std :: sort 알고리즘에 전달할 수있는 방법과 유사하게 functor의 함수를 전환 할 수 있고 그 반대도 가능합니다.
struct add3 {
void operator() (int &v) {v+=3;}
};
...
doOperation<add3>();
웹 링크 또는 두 개 또는 C ++ 템플릿 책의 페이지에 대한 포인터는 높이 평가됩니다!
-std=gnu++17
. C ++ 17 캡처리스 람다 constexpr 변환 연산자의 결과를 함수 포인터 템플릿 비 유형 인수로 사용할 수 있습니까? .