000
20.01.2011, 19:53 Uhr
TOSHMAX
|
Ich versuche gerade herauszufinden ob ein bestimmtes Objekt / Funktion mit bestimmten Parametern aufgerufen werden kann. Jetzt bekomme ich allerdings beim unten stehenden Code einen Fehler und ich komme einfach auf keine Lösung.
Der Fehler wird hervorgerufen von "function1":
Code: |
invalid conversion from 'int' to 'const char*'
|
C++: |
#include <iostream>
#include <string> #include <type_traits>
using std::declval;
template<typename, typename T, typename... Args> struct is_callable_helper : public std::false_type {};
template<typename T, typename... Args> struct is_callable_helper<decltype(declval<T>()(declval<Args>()...), std::true_type()), T, Args...> : public std::true_type {};
template<typename T, typename... Args> struct is_callable : public is_callable_helper<std::true_type, T, Args...> {}; // Fehler hier
bool function1(std::string, std::string&) { return false; } bool function2(std::string&, std::string&) { return false; }
struct structure { bool operator()(std::string, std::string&) const { return false; } };
int main() { std::cout << is_callable<structure, int&, int&>::value << std::endl; std::cout << is_callable<decltype(function1), int&, int&>::value << std::endl; std::cout << is_callable<decltype(function2), int&, int&>::value << std::endl; return 0; }
|
Vielleicht weiß einer wie man das umgehen kann, bzw. warum der Fehler bei "structure" nicht kommt. |