-1
std :: function과 동일한 기능을 구현하고 싶습니다. 함수 포인터를 사용하여 펑터를 생성해야합니다. 템플릿의 첫 번째 형식은 함수의 반환 형식이어야하며 다음 형식은 인수 형식입니다. 그러나 나는 다양한 인수를 가진 함수를 지원하고자한다. 여기 내 코드는 지금까지의 :C++에서 템플릿을 사용하여 std :: function을 구현했습니다.
#include <iostream>
#include <vector>
#include <algorithm>
#include <functional>
using namespace std;
template< typename T, typename... A >
struct create_functor
{
template < typename T (*function)(A) > // here I get an error
struct functor
{
T operator()(A... arguments)
{
return function(arguments);
}
};
};
bool less_than(const int& a, const int& b)
{
return a < b;
}
create_functor< bool, const int&, const int& >::functor< &less_than > less_than_int;
//auto less_than_int_a = std::function< bool(int,int) >(less_than);
int main()
{
vector<int> sample;
sample.push_back(1);
sample.push_back(0);
sample.push_back(3);
sample.push_back(-1);
sample.push_back(-5);
sort(sample.begin(), sample.end(), less_than_int);
for(int a : sample)
{
cout << a << " ";
}
cout << endl;
return 0;
}
내가 (함수 포인터 소요) 문제 내부 템플릿 외부에서 매개 변수 팩을 전달하는 가변 수를 통과하는 방법에 대한
어떤 아이디어가 보인다 함수 선언에 대한 유형을 이해할 수 있습니다.
감사합니다 :)
'less_than'은 타입이 아닌 함수 포인터입니다. 함수 포인터를 타입으로 템플릿 인자에 넘겨 줄 수는 없습니다. –
True, 그러나 bool (int, int) 함수에 대한 특수화를 만들 수는 있습니다. 같은 방식으로 : http://pastie.org/9123706. 나는 템플릿이 함수에 대한 포인터를 가져야한다고 생각한다. – GeneralFailure
무엇을 의미합니까? [컴파일되지 않음] (http://coliru.stacked-crooked.com/a/9751798572bebe3e) –