2015-04-29 24 views
23

Otomatik olarak başka bir işleve argüman olarak geçmenin bir yolu var mı? Bir lambda kullanabilirsiniz AlternatifC++ 'da otomatik olarak argüman olarak geçmenin bir yolu var mı?

template <typename T> 
int function(T data) 
{ 
    //DOES something 
} 

:

int function(auto data) 
{ 
    //DOES something 
} 
+3

bunu yapabilmek için beklediğiniz bağlıdır. Bir işlev şablonunun sunmadığına neye ihtiyacınız var? – Quentin

+0

Bu korkunç bir fikir. Bağımsız değişken türü yalnızca sizin için değil, aynı zamanda diğerlerinin işlevin ne türlerini istediğini bilmesi içindir. Sadece 3 saniye sürün ve yazıyı yazın, o kadar tembel olmayın (ya da türü sabit değilse bir şablon kullanın). – Synxis

+0

Evet, C++ 1z Kavramları ile, bu :) – Navin

cevap

32

bunu geçmek anlamına istiyorsanız

template <typename T> int function(T data); 
: işlevine her tür bunu bir şablon yapmak

kullandığınız sözdizimi (C++ 14 zaten jenerik lambdas için yaptığı gibi) izin vermek C++ 17 için bir öneri var, ama henüz standart değil.

+1

Merak ediyorum: aynı şey mi? Yani, her 'T için 'işlevi olacak olan' auto' 'için yaparken sadece bir, onun kesinti olarak değiştiren. Ya da belki yanılıyor muyum? – edmz

+3

@black: Aynı şeyi yazmanın sadece daha kısa bir yolu. Adlandırılmış bir şablon parametresinde olduğu gibi, 'auto' için çıkarılan her bir parametre türü için farklı bir işlev başlatılacaktır. –

+1

Ben örtülü şablon parametreleri kavramlarla tarafından ... kavramlar artık tamamen öldü kısıtlı olması sanıyordum ya 'auto' kısıtlamasız argümanlar ve kısıtlı olanlar için (birgün) kavramları için kullanılır? –

17

Şablonlar normal fonksiyonları ile bunu yoludur

auto function = [] (auto data) { /*DOES something*/ }; 
+0

o geçerli C++ 11 mi yapabilir? Bu C++ 14 değil mi? – Alex

+0

Genel lambdalar, C++ 14 özelliğidir. – TartanLlama

İlgili konular