Tablica jako parametr.

0

Tworze pewien szablon funkcyjny, argumentem szablonu jest liczba int - pewien rozmiar. Funkcja ta ma przyjmować jako jeden z parametrów dokładnie tyle wartości float, ile wynosi rozmiar. Funkcja wygląda tak:

template<int size> void func(bool b, float args[size]) { ... }

Jednak aby ją wywołać musze wcześniej tworzyć tablice argumentów float, aby ją przekazać jako parametr.

int arguments[3] = { 1.0, 2.0, 3.0 };
func<3>(true, arguments)

Chciałbym jakoś ułatwić przeazywanie parametrów, tak by było możli wywołanie funkcji jednym wyrażniem, np:

func<3>(true, 1.0, 2.0, 3.0)

albofunc<3>(true, { 1.0, 2.0, 3.0 } )



Idzie to jakoś osiągnąć bez specjalnych rozszerzeń języka ?
0

Poczytaj o makrach z biblioteki stdarg.

0
rtp napisał(a)

Poczytaj o makrach z biblioteki stdarg.

No ok, to mi pozwoli przekazać dowolną liczbe argumentów. Ale jak się uchronić przed zła ich ilością, to ma być konkretna ilość zależna od szablonu.

Dodam jeszcze, że funkcja ta jest tak naprawde konstruktorem pewnej klasy szablonewej. Argumentem szablonu jest właśnie liczba int - pewien rozmiar okrślający min. ilość wartości float, jakie należy przekazać do konstruktora.

template <int size>
class klasa
{
public:
   klasa<size>(bool b, float f_1, float f_2 ... float f_size); //chciałbym coś w tym stylu
}
0

jaka maksymalna wartosc bedzie mialo to size? Jesli w ogole bedzie jakies maksimum i nie bedzie zbyt duze (kto by chcial taka funkcje wywolywac ;-) ) to mozesz dac argumenty domyslne na koncu, a w konstruktorze uzywac tylko tyle ile wynosi size.

0

wielkosc tablicy uzyskac mozna w bardzo prosty sposob: wielkosc tablicy/rozmiar elementu, czyli: sizeof(tablica) / sizeof(float)

0
adf88 napisał(a)
rtp napisał(a)

Poczytaj o makrach z biblioteki stdarg.

No ok, to mi pozwoli przekazać dowolną liczbe argumentów. Ale jak się uchronić przed zła ich ilością, to ma być konkretna ilość zależna od szablonu.

Możesz je najpierw policzyć i ewentualnie wyrzucić wyjątek. Przed różnymi typami zmiennych raczej się nie uchronisz; makra ze stdarg raczej nie są bardzo bezpieczne lepiej po prostu użyć zwykłej tablicy/wektora.

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