ich kann nicht herausfinden, warum dieses Segment ungelöst überladene Funktionsfehler gibt (gcc Version 4.3.4 (Debian 4.3.4-6)):C++ Boost-Funktion überladene Vorlage
#include <algorithm>
#include <boost/function.hpp>
// this does not work
int main1()
{
typedef boost::function<const int&(const int&, const int&)> max;
max m(&std::max<int>);
}
// this does not work
int main2() {
typedef boost::function2<const int&, const int&, const int&> max;
max m(static_cast<max>(&std::max<int>));
}
können Sie mir helfen, danke
test.cpp: In function âint main()â:
test.cpp:7: error: no matching function for call to âboost::function2<const int&, const int&, const int&>::function2(<unresolved overloaded function type>)â
/usr/include/boost/function/function_template.hpp:747: note: candidates are: boost::function2<R, T1, T2>::function2(const boost::function2<R, T1, T2>&) [with R = const int&, T0 = const int&\
, T1 = const int&]
/usr/include/boost/function/function_template.hpp:739: note: boost::function2<R, T1, T2>::function2(boost::function2<R, T1, T2>::clear_type*) [with R = const int&, T0 = cons\
t int&, T1 = const int&]
/usr/include/boost/function/function_template.hpp:707: note: boost::function2<R, T1, T2>::function2() [with R = const int&, T0 = const int&, T1 = const int&]
max/min wird als
definierttemplate<typename _Tp>
inline const _Tp&
max(const _Tp& __a, const _Tp& __b)
{
// concept requirements
__glibcxx_function_requires(_LessThanComparableConcept<_Tp>)
//return __a < __b ? __b : __a;
if (__a < __b)
return __b;
return __a;
}
ich habe alle möglichen Vorlage explizite Instanziierung versucht, aber nothi ng scheint zu funktionieren. Das gleiche Problem scheint mit g ++ 4.1 aber nicht mit ICC
das funktioniert
#include <algorithm>
#include <boost/function.hpp>
namespace std_ {
template<typename _Tp>
inline const _Tp&
max(const _Tp& __a, const _Tp& __b)
{
// concept requirements
//return __a < __b ? __b : __a;
if (__a < __b)
return __b;
return __a;
}
}
int main()
{
typedef const int &T;
typedef boost::function<T(T,T)> min_;
//typedef const int&(*min_)(const int&, const int&);
min_ m(::std_::max<int>);
}
und diese
#include <algorithm>
#include <boost/function.hpp>
int main()
{
//typedef const int &T;
//typedef boost::function<T(T,T)> min_;
typedef const int&(*min_)(const int&, const int&);
min_ m(::std::max<int>);
}
Funktioniert es ohne die 'static_cast' oder mit der generischen' function' Klasse? – GManNickG
@GMan nein, funktioniert nicht ohne statische Besetzung (das war ein Zeichen der Verzweiflung). Was ist eine generische Funktionsklasse? – Anycorn
Was Sie haben. Ich meine generisch nur als "nicht spezifisch für ein bestimmtes n". (Das heißt, "Funktion" ist allgemeiner als "Funktion2"). – GManNickG