kickerxy123
Erfahrenes Mitglied
Guten Tag zusammen,
ich habe ein Problem bezüglich Variadic Template Programmierung.
Ich habe mir vor einiger Zeit eine eigene Tuple Klasse geschrieben, die u.a. auch auf std::tuple zurückgreift.
Ich benötige nun eine Funktion, die mir aus dem Tuple das x-te Argument zurückliefert (mit dessem ursprünglichen Datentyp).
Da dachte ich an eine ganz einfache Lösung:
Wenn ich das aufrufe mit:
Dann erhalte ich folgende Fehlermeldung:
Invalid operands of type "<unresolved overloaded function type>" and "long unsigned int" to binary "operator<"
Kann mir da bitte wer weiterhelfen?
Ich denke es ist nur eine Kleinigkeit...
Danke sehr und VG
kickerxy
edit:
ich habe meine Funktion nochmal geändert. Ich denke diese neue Art der Deklaration mit auto/decltype ist hier genau richtig!
Jetzt erhalte ich bei
expected primary expression before ")" token
und weiterhin Invalid operands of type "<unresolved overloaded function type>" and "long unsigned int" to binary "operator<"
ich habe ein Problem bezüglich Variadic Template Programmierung.
Ich habe mir vor einiger Zeit eine eigene Tuple Klasse geschrieben, die u.a. auch auf std::tuple zurückgreift.
Ich benötige nun eine Funktion, die mir aus dem Tuple das x-te Argument zurückliefert (mit dessem ursprünglichen Datentyp).
Da dachte ich an eine ganz einfache Lösung:
C++:
template<typename ...Tn>
template<std::size_t N>
typename std::enable_if<(N > -1)>::type* CTuple<Tn...>::getS(void)
{
return ::get<N>(*pTuple);
}
C++:
template <typename... S, >
bool test(CTuple<S...>* pOutReturn )
{
for(int i = 0; i < pOutReturn->getSize(); i++)
{
pOutReturn->getS<i>();
//do domething
}
}
//main:
int d,e,f;
CTuple<int*,int*,int*>* a = new CTuple<int*,int*,int*>(&d,&e,&f);
test(a);
Dann erhalte ich folgende Fehlermeldung:
Invalid operands of type "<unresolved overloaded function type>" and "long unsigned int" to binary "operator<"
Kann mir da bitte wer weiterhelfen?
Ich denke es ist nur eine Kleinigkeit...
Danke sehr und VG
kickerxy
edit:
ich habe meine Funktion nochmal geändert. Ich denke diese neue Art der Deklaration mit auto/decltype ist hier genau richtig!
C++:
template<std::size_t N>
auto getS(void) -> decltype(::get<N>(*(this->pTuple)))
{
return ::get<N>(*pTuple);
};
}
Jetzt erhalte ich bei
C++:
pOutReturn->getS <2> ( );
und weiterhin Invalid operands of type "<unresolved overloaded function type>" and "long unsigned int" to binary "operator<"
Zuletzt bearbeitet: