2011-06-13 19 views
16

Ş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?

+0

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

+0

@ AJG85: Hayır - örnek koda bakarsanız şablon işlevini kendi işlev şablonumun içinde farklı şablon argümanlarıyla çağırıyorum. –

+0

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

cevap

17

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.

11

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.

+0

Başarılı bir şekilde derlemek için ilk "<" den sonra bir boşluk koymanız gerektiğini düşünüyorum. –

+3

@dario_ramos: Thats okay: http://www.ideone.com/S639B. C++ 03'te '>' 'olması gereken' '' yazarken alan gereklidir. Bu C++ 0x'da giderilmiştir. – Nawaz

İlgili konular