-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'是一個函數指針,不是類型,你不能將函數指針作爲類型傳遞給模板參數 –
是的,但是我設法爲bool(int,int)函數創建了這個專用化以同樣的方式:http://pastie.org/9123706。我猜模板應該把指針指向函數。 – GeneralFailure
你是什麼意思? [它不會編譯](http://coliru.stacked-crooked.com/a/9751798572bebe3e) –