İki türün aynı olup olmadığını, ancak şablon parametrelerinden bağımsız olarak kontrol etmek isterim. Böyle bir şey:İki türün aynı tempold sınıfından gelip gelmediğini kontrol etme
template<class T>
class A {};
class B {};
int main() {
cout << std::is_same_template<A<int>, A<string>>::value << endl; // true
cout << std::is_same_template<A<int>, B>::value << endl; // false
}
Ben iki tip exacty eşleşirse kontrol için std::is_same
farkındayım.
Bunu neden ihtiyaç A nedeni: Ben herhangi bir türü ile çağrılabilir templated yöntemi var ama bir static_assert
kullanarak muhtemelen ki (şablon olarak değiştirilebilir) tip A
ile adı verilir yasaklamak istiyorum. El ile birkaç ortak Ts için hariç tutabilir kullanarak, bir arıyorum: A
şablonlu muyduk
DÜZENLEME ..., ben std::is_same
kullanarak kolayca yapılabilir inanıyorum, ama şimdi, bir sorun var yolu tüm T için bunu yapmak için:
static_assert(!std::is_same<parameter_type, A<int>>::value, "Cannot use this function with type A<T>");
static_assert(!std::is_same<parameter_type, A<double>>::value, "Cannot use this function with type A<T>");
static_assert(!std::is_same<parameter_type, A<bool>>::value, "Cannot use this function with type A<T>");
İki tip: Aşağıdaki açıklama, uzmanlaşma" ve "A ", aynı tür olmaktan uzaktır. –
skypjack
std::array
için (veya aynı imzaya sahip diğer şablonda) 'de @Helix tarafından talep edildiği üzere şablon parametreleri farklıysa, aynı değildir. Böylece, "Eh, bunun farkındayım, bu yüzden std :: is_same' kullanamıyorum. Ne soruyorum, daha az karşılaştırma yapmak için bir yol varsa, A ve A eşit ve A ve B değil mi? –
jureslak
Tersine çevirilmiş yaklaşımı şablon uzmanlığı ile kullanabilirsiniz, böylece yalnızca izin verilen sınıfları kabul edin ve boş/kırık/atma/başka türlü bir işlevi tanımlayın. – skypjack