C++ (11) <type_traits>
'u nasıl kullanacağımı anlamaya çalışıyorum. Ben GCC şablon parametresi U
anlamak neden hiçbir ipucu varŞablon Bağımsız Değişken Türü Kesinti Başarısız Olduğu C++ 11 <type_traits>
/home/per/f.cpp: In function ‘int main(int, const char**, const char**)’:
/home/per/f.cpp:15:23: error: no matching function for call to ‘add(unsigned int&, int&)’
auto a = add(ui, i);
^
/home/per/f.cpp:15:23: note: candidate is:
/home/per/f.cpp:5:10: note: template<class U, class S> U add(typename std::enable_if<std::is_unsigned<U>::value, U>::type, typename std::enable_if<std::is_signed<S>::value, S>::type)
inline U add(typename std::enable_if<std::is_unsigned<U>::value,U>::type a,
^
/home/per/f.cpp:5:10: note: template argument deduction/substitution failed:
/home/per/f.cpp:15:23: note: couldn't deduce template parameter ‘U’
auto a = add(ui, i);
^
olarak GCC 4.8.1 o hataları ile derlenen
İşte benim önemsiz test programı
#include <type_traits>
template<class U, class S>
inline U add(typename std::enable_if<std::is_unsigned<U>::value,U>::type a,
typename std::enable_if<std::is_signed <S>::value,S>::type b)
{
return a + b;
}
int main(int argc, const char * argv[], const char * envp[])
{
unsigned int ui;
int i;
auto a = add(ui, i);
return 0;
}
bu. Kodumun hangi bilginin eksik olduğunu bilen var mı? C++ 11'de ilk argüman olarak imzasız bir integral türü alan ve integral türünü ikinci olarak imzalayan bir program nasıl yazarım?
Sen decuce olamaz türleri 'bir nitelik kazanıyor sol ::'. –
** 14.8.2.5 Şablon argümanlarının bir türden çıkarılması [temp.deduct.type] ** 5 Çıkarılamayan bağlamlar şunlardır: - Nitelikli bir tanım kullanılarak oluşturulan bir türün iç içe-isim-türü. – TemplateRex
Tüm güzel yorumlar ve cevaplar için teşekkürler! –