yapılar ile Nest şablonları

oy
-1
template<int N, typename operation, typename T>
 struct cascade{
  operation op;
   struct cascade<N-1, operation, T> next;
  T operator()(T t){return(op(next(t)))};
  cascade(operation* ops):op(ops[N-1]),next(ops)

 }

cascade<3, biquad<float>, float> filter(cascade_elements);

Yukarıdaki kod için, kademeli yapı örneği oluşturulduğunda, oluşturulan bir amacı süzgecinin tutma op değişken yapı kademeli bir örneği daha sonraki mi?

struct cascade<N-1, operation, T> next

Eğer öyleyse, tekrar ama hiçbir argümanlarla yapının kurucusunu çağırmak olacaktır. Ne im ilk ne yapılır edilir hakkında karıştı? 1 yapıcı çağrısının initilisation önce oluşturulan gömülü yapının örneğidir:

cascade(operation* ops):op(ops[N-1]),next(ops)

Eğer öyleyse ilk kurucu gömülü yapı örneğini başlatılıyor bitirir önce, gömülü örneği başka yapıcı arayacak

Oluştur 27/11/2018 saat 18:24
kaynak kullanıcı
Diğer dillerde...                            


1 cevaplar

oy
0

Yukarıdaki kod için, kademeli yapı örneği oluşturulduğunda, oluşturulan bir amacı süzgecinin tutma op değişken yapı kademeli bir örneği daha sonraki mi?

Sayılır. Lütfen unutmayın cascadebir değil struct. Bu bir olan structşablonu. Bir containg structtipi aynı tür değil next. Eğer bir örneğini oluşturduğunuzda cascade<10, SomeOp, SomeType>, bu bir örneğini tutan cascade<9, SomeOp, SomeType>bir örneğini tutan, cascade<8, SomeOp, SomeType>Gördüğünüz gibi, vb bu irade özyinelemede sonlandırma türü olmayan bir sorun. Bir sonlandırma tipi gibi bir şey olabilir:

template<typename operation, typename T>
struct cascade<0, operation, T>
{
   ...
};

bu yoktur nextonun içinde.

Eğer öyleyse, tekrar ama hiçbir argümanlarla yapının kurucusunu çağırmak olacaktır.

Hayır, böyle olmaz. nextFarklı bir türüdür. Sen explitly ile yapıcısı bunu başlatılıyor op.

Ne im ilk ne yapılır edilir hakkında karıştı?

Şimdi biliyoruz ki onlar, iki farklı tip vardır Ben artık kafa karıştırıcı değil umuyoruz.

1 yapıcı çağrısının initilisation önce oluşturulan gömülü yapının örneğidir:

cascade(operation* ops):op(ops[N-1]),next(ops)

Bir kez daha, bu artık kafa karıştırıcı değil umuyoruz.


İşte ile sınıfının daha basit versiyonu bulunuyor mainfonksiyonu.

#include <iostream>

template<int N, typename T>
struct cascade 
{
   struct cascade<N-1, T> next;

   cascade() : next()
   {
      std::cout << "Constructing an object with template parameter " << N << std::endl;
   }
};

template<typename T>
struct cascade<0, T>
{
   cascade()
   {
      std::cout << "Constructing an object with template parameter " << 0 << std::endl;
   }
};

int main()
{
   cascade<10, int> c;
}

Ve onun çıkışı:

Constructing an object with template parameter 0
Constructing an object with template parameter 1
Constructing an object with template parameter 2
Constructing an object with template parameter 3
Constructing an object with template parameter 4
Constructing an object with template parameter 5
Constructing an object with template parameter 6
Constructing an object with template parameter 7
Constructing an object with template parameter 8
Constructing an object with template parameter 9
Constructing an object with template parameter 10

Umarım cevabın ilk bölümünde açıklama şimdi daha mantıklı.

Cevap 27/11/2018 saat 18:37
kaynak kullanıcı

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more