Makro zależne od ilosci/obecnosci parametrów

0

Witam.
potrzebuje napisać makro gdzie w zależności od tego czy będę podawać do niego argumenty wywoła inną funkcję

MOJE_MAKRO() -> wywoła funkcję READ()
MOJE_MAKRO(A,B,C) -> wywoła funkcję WRITE(A,B,C)

jakieś sugestię?

0

po kilku godzinach poszukiwać prawdopodobnie znalazłem rozwiązanie z wykorzystaniem VA_ARGS i przeciążeniem funkcji
jednak wolałbym aby ktoś się wypowiedział czy czają się tutaj jeszcze jakieś "chochliki"

#include <iostream>

using namespace std;

#define SPIrw_HELPER(...) SPIrw(__VA_ARGS__)

#define var(...) SPIrw_HELPER(0x12,7,3,##__VA_ARGS__)

int SPIrw(uint8_t addr, uint8_t POS, uint8_t LEN, uint8_t val){ // write
//    write value to SPI device
    return 1;
}
int SPIrw(uint8_t addr, uint8_t POS, uint8_t LEN){ // read
//    only read value from SPI device
    return 2;
}
int main()
{
    cout << var(7) << endl; // write = 1
    cout << var() << endl; // read = 2

    return 0;
}



5

Ale to miało wywoływać funkcje o zupełnie innej nazwie (w twoim przykładzie: READ i WRITE) a ten kod wywołuje funkcje o tej samej nazwie (SPIrw) tylko o różnej liczbie parametrów.

Więc albo podane rozwiązanie nie jest rozwiązaniem albo źle na początku sformułowałeś problem.

1

A zamiast makra nie lepiej opakować to w strukturę z przeładowanym operatorem wywołania? Albo za pomocą szablonów?

0

Ja to zrobiłem tak: https://gitlab.com/cdf-project/cdf-core/blob/master/ooc/src/ooc_macros.h#L7

Makro new wywołuje w zależności od ilości argumentów odpowiednio makra _new0, _new1... Ale to jest chyba tylko dla gcc

1 użytkowników online, w tym zalogowanych: 0, gości: 1