SORU
17 Mayıs 2015, Pazar


Neden bu iç içe variadic geçersiz bir argüman şablon?

Ben şablon bağımsız değişken kabul eden struct şablon Bar tanımlamak:

template <template <int,bool,char> class>
struct Bar {};

Zod: struct bir şablon kullanarak oluştur edebilirim

template <int,bool,char> struct Zod {};
Bar<Zod> a;

Ayrıca JKL struct iç içe geçmiş bir şablon kullanarak oluştur.

struct GHI {
  template <int,bool,char>
  struct JKL {};
};
Bar <GHI::JKL> b;

Neden ben Bar DEF?: struct iç içe variadic bir şablon kullanarak oluştur olabilir mi

template <typename ...Ts>
struct ABC {
  template <Ts ...>
  struct DEF {};
};

Bar<ABC<int,bool,char>::DEF> c;

G 4.9.2 değer uyuşmazlığı/türü şikayetçi; Çınlama süre 3.4.2 hata şablon bağımsız değişken karşılık gelen şablon şablon parametre daha farklı bir şablon parametreleri bildirdi.

CEVAP
26 Mayıs 2015, Salı


Bu DEF parametre pack referans kolaylığı için bir isim verelim

template <typename ...Ts>
struct ABC {
  template <Ts ... Values>
  struct DEF {};
};

Burada kilit nokta olduğuna göre [temp.param] p15, */19*her ikisi deTs sürüsü bir genişleme ve bir parametre ilanı Values paketi.

Bir eğerşablon parametresi[ ... ]parametre bildirimibu ilan parametre pack (8.3.5)şablon parametresibir parametre takımı (14.5.3) şablonu. Bir şablon parametresi paketi parametre bildirimibir veya daha fazla parametre unexpanded paketleri içeren bir genişleme paketi.

DEF olmayan bir tür parametresi paketi aldığından, paketleri almaz bir template parametresi uymuyor ([temp.arg.şablon]/p3):

Birşablon bağımsız değişkenieşleşen bir şablonşablon parametresiP şablon parametrelerini her şablon parametre listesişablon bağımsız değişkeni< . em ^/’karşılık gelen sınıf şablon veya şablon Bir diğer adı karşılık gelen şablon maçlar şablon parametre-parametre-listesi P. İki şablon parametreleri eğer aynı cinsten olmaları durumunda maçı (tip, tip, şablon) olmayan bir tipşablon parametresis, çeşitleri eşdeğer (14.5.6.1) ve şablon içinşablon parametresis, onların ilgili her şablon parametresiözyinelemeli olarak eşleşir. P zamanşablon parametre listesibir şablon pack (14.5.3), şablon parametresi parametre pack sıfır ya da daha fazla şablonu maç olacak içerir şablon parametreleri ya da parametre paketleri şablon parametre listesi(o olup olmadığını görmezden şablonda P şablon parametre paketi olarak aynı tip ve form ile Bir parametreleri şablon paketleri parametre).

Tam emin olmak için Values oldukça tuhaf paketleri - her uzmanlık ABC, Values içermelidir sabit bir sayıda bağımsız değişken - ama altında mevcut kurallar hala bir paketi, yani kurallara paketleri için geçerlidir.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • BaaaStuds's channel

    BaaaStuds's

    10 Mart 2009
  • Jesse Pimenta

    Jesse Piment

    5 EKİM 2011
  • TheOtherMau5

    TheOtherMau5

    6 Mart 2012