0
ich die unten einfache Sache bin versucht, das Verhalten von ADLFehler Instanziieren Funktionsvorlage
namespace test{
struct S{ public: s():a(10){} int a;};
template<typename T>
void fun(S o){
T a{};
std::cout<<(a+o.a)<<"\n";
}
}
int main(){
test::S A;
fun<int>(A);
}
error1: expected primary-expression before ‘int’
fun<(int)>(A);
error2:'fun’ was not declared in this scope
fun<int>(A);
Ich bin nicht sicher über den ersten Fehler zu trainieren (es hat nichts mit C++ ärgerlichen Parsing umgehen?) Und für die zweiter Fehler, da ich das Argument des Typs S
übergeben habe Ich glaube, dass die ADL S
und die damit verbundenen namespace test
betrachten wird, aber nicht sicher, warum ich Fehler bekomme.
Guter Versuch, aber ich denke, Sie den Punkt der Frage verfehlt. Es gibt eine Funktion in C++ namens ADL, die dies überflüssig machen würde, und die Frage ist, warum ADL im angegebenen Code nicht ausgelöst wird. –
@Tomas Dittmann Ich bin dankbar für Ihre Antwort, aber ich bin über diese "ADL durch die Suche nach dem Namen in Namespaces und Klassen" mit den Typen der Aufrufargumente. Die genaue Definition dieser zugeordneten Namespaces und zugehörigen Klassen gegeben später, aber intuitiv können sie als alle Namespaces und Klassen gedacht werden, die ziemlich direkt mit einem bestimmten Typ verbunden sind. " –
Ahh Ich habe noch nie von ADL gehört. Ich lese gerade darüber. Lernen durch falsche Antworten ... –