Şunun gibi bir şey yazmaya çalışıyorum:Bir şablonu şablona şablon parametresi olarak nasıl geçiririm?
Something a, b;
Something c = MergeSomething<std::plus>(a, b);
Bunu nasıl yaparım?
Şunun gibi bir şey yazmaya çalışıyorum:Bir şablonu şablona şablon parametresi olarak nasıl geçiririm?
Something a, b;
Something c = MergeSomething<std::plus>(a, b);
Bunu nasıl yaparım?
Bu sadece bir "şablon şablon argümanı" dir:
Stephen C. Dewhurst tarafından bu makaleye bakın. Sözdizimi hayal ettiğinize çok yakın. İşte burada: Kullanım çantanız sizin gönderdiğiniz gibi çalışmalıdır.yolu doğrudur. Ancak işlev şablon tanımlamanızın kendisi yanlış.
Bu şekilde olmalıdır:
template<template<typename Ty> class FunctorT> //<---here is the correction
Something MergeSomething(const Something& lhs, const Something& rhs)
Ve Ty
gerekli değildir. Aslında, orada anlamsızdır. Tamamen ihmal edebilirsiniz.
Başarılı bir şekilde derlemek için ilk "<" den sonra bir boşluk koymanız gerektiğini düşünüyorum. –
@dario_ramos: Thats okay: http://www.ideone.com/S639B. C++ 03'te '>' 'olması gereken' '' yazarken alan gereklidir. Bu C++ 0x'da giderilmiştir. – Nawaz
Basit bir 'şablon' yeterli olmaz ve daha sonra 'MergeSomething >' a geçmez, aksi takdirde 'boost :: function' veya 'boost :: bind' kapaklarının altında bir tepe verebilir. biraz içgörü. –
AJG85
@ AJG85: Hayır - örnek koda bakarsanız şablon işlevini kendi işlev şablonumun içinde farklı şablon argümanlarıyla çağırıyorum. –
Ah evet bu yüzden bu basitleştirilmiş bir koddur ve tip tayini gerçekte o kadar önemsiz değildir sanırım vardır. İyi soru sanırım böyle bir şeyden yararlanabilecek bazı genel depolama sınıflarım olabilir. – AJG85