🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

7 total messages Started by M.M. Sat, 08 Aug 2020 21:09
typ szablonu zdefiniowany po użyciu - g++14 nie kompiluje :/
#310255
Author: M.M.
Date: Sat, 08 Aug 2020 21:09
13 lines
1312 bytes
To chyba powinien spokojnie skompilować:

template<
    TYPEX param,
    typename TYPEX = int
>
class TestX {
};


Można to jakoś 'obejść'?

Pozdrawiam
typ szablonu zdefiniowany po użyciu - g++14 nie kompiluje :/
#310256
Author: Wojciech Muła
Date: Sun, 09 Aug 2020 06:58
1 lines
1399 bytes
Coś przekombinowałeś, wystarczy template<typename T = int>
Re: typ szablonu zdefiniowany po użyciu - g++14 nie kompiluje :/
#310257
Author: M.M.
Date: Sun, 09 Aug 2020 09:59
51 lines
2227 bytes
On Sunday, August 9, 2020 at 8:58:57 AM UTC+2, Wojciech Muła wrote:
> Coś przekombinowałeś, wystarczy template<typename T = int>

Nie wiem czy przekombinowałem.

Poniższy kod (u mnie?) się nie kompiluje:

emplate<
    TYPEX param,
    typename TYPEX = int
>
class TestX {
};


Mogę, rzecz jasna, dać:

template<
    typename TYPEX
    TYPEX param,
>
class TestX {
};

Ale teraz za każdym razem muszę podawać typ, a typ int będzie może w 95%
przypadków właściwym typem:

TestX<int,50> x;

Chodzi o to, aby wygodnie sobie pisać:

TestX<50> x;


Z auto z tego co pamiętam (nie próbowałem) też się nie kompiluje:

template<
    auto TYPEX
    decltype(TYPEX) param,
>
class TestX {
};


Ale to też jest nieprzejrzyste rozwiązanie, bo suffixy są mało widoczne :/

TestX< 50u > x;

No ale ostatni przykład też się nie kompiluje, więc nie ma o co kruszyć kopii.

Pozdrawiam
Re: typ szablonu zdefiniowany po użyciu - g++14 nie kompiluje :/
#310258
Author: Przemek Biernat
Date: Mon, 10 Aug 2020 11:48
40 lines
2293 bytes
> 
> Mogę, rzecz jasna, dać:
> 
> template<
>     typename TYPEX
>     TYPEX param,
> >
> class TestX {
> };
> 
> Ale teraz za każdym razem muszę podawać typ, a typ int będzie może w 95%
> przypadków właściwym typem:
> 
> TestX<int,50> x;
> 
> Chodzi o to, aby wygodnie sobie pisać:
> 
> TestX<50> x;
> 
> 
> Z auto z tego co pamiętam (nie próbowałem) też się nie kompiluje:
> 
> template<
>     auto TYPEX
>     decltype(TYPEX) param,
> >
> class TestX {
> };
> 
> 
> Ale to też jest nieprzejrzyste rozwiązanie, bo suffixy są mało widoczne :/
> 
> TestX< 50u > x;
> 
> No ale ostatni przykład też się nie kompiluje, więc nie ma o co kruszyć kopii.
> 
> Pozdrawiam

Nie lepiej param przenieść do konstruktora?
Re: typ szablonu zdefiniowany po użyciu - g++14 nie kompiluje :/
#310260
Author: Marcin
Date: Mon, 10 Aug 2020 19:09
66 lines
2556 bytes
W dniu 09.08.2020 o 11:59, M.M. pisze:
> On Sunday, August 9, 2020 at 8:58:57 AM UTC+2, Wojciech Muła wrote:
>> Coś przekombinowałeś, wystarczy template<typename T = int>
> 
> Nie wiem czy przekombinowałem.
> 
> Poniższy kod (u mnie?) się nie kompiluje:
> 
> emplate<
>      TYPEX param,
>      typename TYPEX = int
>>
> class TestX {
> };
> 
> 
> Mogę, rzecz jasna, dać:
> 
> template<
>      typename TYPEX
>      TYPEX param,
>>
> class TestX {
> };
> 
> Ale teraz za każdym razem muszę podawać typ, a typ int będzie może w 95%
> przypadków właściwym typem:
> 
> TestX<int,50> x;
> 
> Chodzi o to, aby wygodnie sobie pisać:
> 
> TestX<50> x;
> 
> 
> Z auto z tego co pamiętam (nie próbowałem) też się nie kompiluje:
> 
> template<
>      auto TYPEX
>      decltype(TYPEX) param,
>>
> class TestX {
> };
> 
> 
> Ale to też jest nieprzejrzyste rozwiązanie, bo suffixy są mało widoczne :/
> 
> TestX< 50u > x;
> 
> No ale ostatni przykład też się nie kompiluje, więc nie ma o co kruszyć kopii.
> 
> Pozdrawiam
> 

template <typename T, T param>
class TestX;

template <int param>
using TestInt = TestX<int, param>;

albo w C++17:

template <auto param>
class TestX;

Marcin
Re: typ szablonu zdefiniowany po użyciu - g++14 nie kompiluje :/
#310259
Author: M.M.
Date: Mon, 10 Aug 2020 20:54
44 lines
2480 bytes
On Monday, August 10, 2020 at 1:48:27 PM UTC+2, Przemek Biernat wrote:
> > 
> > Mogę, rzecz jasna, dać:
> > 
> > template<
> >     typename TYPEX
> >     TYPEX param,
> > >
> > class TestX {
> > };
> > 
> > Ale teraz za każdym razem muszę podawać typ, a typ int będzie może w 95%
> > przypadków właściwym typem:
> > 
> > TestX<int,50> x;
> > 
> > Chodzi o to, aby wygodnie sobie pisać:
> > 
> > TestX<50> x;
> > 
> > 
> > Z auto z tego co pamiętam (nie próbowałem) też się nie kompiluje:
> > 
> > template<
> >     auto TYPEX
> >     decltype(TYPEX) param,
> > >
> > class TestX {
> > };
> > 
> > 
> > Ale to też jest nieprzejrzyste rozwiązanie, bo suffixy są mało widoczne :/
> > 
> > TestX< 50u > x;
> > 
> > No ale ostatni przykład też się nie kompiluje, więc nie ma o co kruszyć kopii.
> > 
> > Pozdrawiam
> 
> Nie lepiej param przenieść do konstruktora?

W tym przypadku niestety nie.

Pozdrawiam i dziękuję.
Re: typ szablonu zdefiniowany po użyciu - g++14 nie kompiluje :/
#310261
Author: M.M.
Date: Mon, 10 Aug 2020 21:02
29 lines
2128 bytes
On Monday, August 10, 2020 at 9:09:11 PM UTC+2, Marcin wrote:
> template <typename T, T param>
> class TestX;
> 
> template <int param>
> using TestInt = TestX<int, param>;

O tym samym pomyślałem, to chyba najzwięźlejsze-kompilowane 
rozwiązanie w tej sytuacji. Ale:
[
template <T param, typename T = int>
class TestX;
]
wydaje się tak naturalnym kodem, zwłaszcza gdy T ma wartość domyślną, że
jestem zdziwiony iż się nie skompilowało w c++11.



> albo w C++17:
> 
> template <auto param>
> class TestX;
> 
> Marcin

Próbowałem, właśnie g++14 nie skompilował.


Pozdrawiam, dziękuję.
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads