Tablica jako parametr.

Tablica jako parametr.
adf88
  • Rejestracja:ponad 21 lat
  • Ostatnio:około 12 lat
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:

Kopiuj
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.

Kopiuj
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:

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

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

Kopiuj

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

Poczytaj o makrach z biblioteki stdarg.

adf88
  • Rejestracja:ponad 21 lat
  • Ostatnio:około 12 lat
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.

Kopiuj
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
}
foflik
  • Rejestracja:ponad 21 lat
  • Ostatnio:około 17 lat
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.

vixen03
  • Rejestracja:ponad 21 lat
  • Ostatnio:prawie 14 lat
  • Postów:475
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.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.