Farz edelim ki, çift ve kullanıcı tanımlı türler dahil olmak üzere sayı benzeri türlerde kullanılabilmesi gereken bir genel kitaplık geliştirmek istiyorum. İlkel türleri için"Genel işlev" in dönüş türünün belirlenmesi
template<class T>
auto transmogrify(T x)
-> ???
{
using std::abs;
return abs(x)+2.0;
}
kullanarak beyan yapar bu fonksiyon şablonun vücut çalışması:, şu anda karşı karşıya ediyorum sorun şu kadarını biri gibi bir işlev şablonunun dönüş türü yazma bilen kalmamasıdır Çünkü bunlarla ilişkili bir ad alanı yoktur (ve dolayısıyla ADL yoktur). Ancak, kullanıcı tanımlı tipte yazarın kendi abs işlevini sağlaması durumunda uzmanlık gerektiren abs fonksiyonlarını kullanmak için dönüştürücü istiyorum. std :: abs kapsamında olmadığından (anlayabilirim kadarıyla) bu diyelim ki, iki katına, için işe yaramaz çünkü sadece
-> decltype(abs(x)+2.0)
kullanamaz. Ancak,
, ADL'yi devre dışı bırakır. Ancak, ADL'yi devre dışı bırakmak bir seçenek değildir. Ayrıca, özel bir abs işlevi tarafından döndürülen değer T türünde değil, başka türde olabilir.
İade türü sorununun nasıl çözüleceği ile ilgili herhangi bir fikir (a) ADL'yi ve (b) belirli bir varsayılan işlevi (std :: abs gibi) özel bir abs sağlamayan türler için geri almayı sürdürürken .
'#define ab std :: abs kullanarak; your_template_fn #undef ab ' –
yapmak için iyi bir seçim yapıp yapmayacağından emin değil misiniz? –
@ Mr.Anubis ve bu tanımla işlevinin dönüş türünü nasıl tanımlar? – ForEveR