Dziwny szablon

0
template<std::size_t Strict, typename Container>
    static typename Container::const_iterator find(const Container& container, const typename Container::key_type& key) {
        return DictFinderHelper<Container, FindHelper, Strict>::find(container, key);
    }
 

Wywolanie:find<1>(x, y);

Wie ktos o co chodzi z ta 1 ?

0
Pijany Szczur napisał(a):
template<std::size_t Strict, typename Container>
    static typename Container::const_iterator find(const Container& container, const typename Container::key_type& key) {
        return DictFinderHelper<Container, FindHelper, Strict>::find(container, key);
    }
 

Wywolanie:find<1>(x, y);

Wie ktos o co chodzi z ta 1 ?

find<1>(x, y);

1

Jeśli szablon jest używany w argumencie to kompilator może się domyślić typu.

0

czyli mogloby byc find(arg,arg); ???

0

Nie, chyba że dasz domyślny szablon:

template<std::size_t Strict = 1, typename Container>
    static typename Container::const_iterator find(const Container& container, const typename Container::key_type& key) {
        return DictFinderHelper<Container, FindHelper, Strict>::find(container, key);
    }

Po prostu jeśli wywołasz find z argumentem o typie int, no to kompilator wie, że za Containter trzeba podstawić typ int. (tutaj oczywiście to nie zadziała, ale liczy się sam przykład).

0

Nie mogłoby być, bo wtedy skąd kompilator ma wiedzieć, jaki jest pierwszy argument szablonowy?
Pełne wywołanie byłoby

find<1, decltype(x)>(x, y);

przyrównując do definicji funkcji

template<std::size_t Strict, typename Container>  // Strict = 1, Container = decltype(x)

Ale jako że pierwszy argument funkcji x jest typu decltype(x), więc drugi argument szablonu może być pominięty, bo kompilator sam się domyśli jaki ma być.

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