2016-11-02 7 views
-4

Ich versuche, ein C++ - Makro mit einer variablen Anzahl von Argumenten (0 bis 1) zu erstellen, die als Wrapper für einen Funktionsaufruf fungieren, um den this-Zeiger zu liefern eines aufrufenden Objekts als Standardargumentwert.das eines aufrufenden Objekts als Standardargument C++

Damit der Benutzer die Anrufe machen könnte:

CALL(pointer) // An argument is supplied, pass it to the call 
    CALL()  // No argument supplied, pass the this pointer value instead 
+3

1. Was ist die eigentliche Frage? 2. Was hast du bisher versucht? – UnholySheep

+0

C++ - Makros haben nicht viele Funktionen, ich würde vorschlagen, einen anderen Weg zu finden, um das zu tun, was Sie wollen. –

+1

@MarkRansom Boost.PP stimmt nicht mit dir überein :) – Quentin

Antwort

0

Sie Boost verwenden könnte ein Makro zu schreiben, die Sie sich verlassen können, wie viele Parameter gibt. Dies funktioniert jedoch nur, wenn Sie mindestens einen Parameter haben. Wenn Sie einen Null-Parameter-Boost haben, denken Sie, dass Sie einen haben. Das ist also nicht genau eine Antwort auf Ihre Frage (es sei denn, Sie können mit der Übergabe mindestens eines Parameters leben). Ich poste es dennoch als eine Antwort, weil es für Leute mit ähnlichen Situationen hilfreich sein könnte, und die andere angenommene Antwort der "doppelten" Ausgabe stellt diese Lösung nicht zur Verfügung.

#include <iostream> 
#include <boost/preprocessor/tuple/elem.hpp> 

#define CALL(...)         \ 
    {             \ 
    auto num = BOOST_PP_VARIADIC_SIZE(__VA_ARGS__); \ 
    std::cout << "called with " << num << " args." << std::endl; \ 
    } 

int main() { 
    CALL(1, 2); 
    CALL(1); 
} 
Verwandte Themen