ile doğru işleve çözümlemiyor Bir struct/range (tuple
-esque) üyelerini almak için bir ADL çözümlenmiş get
kullanan bir şablon işlevini kodlamaya çalışıyorum.Neden ADL, std :: get
#include <iostream>
#include <utility>
#include <tuple>
int main() {
auto tup = std::make_tuple(1, 2);
std::cout << get<0>(tup) << std::endl;
}
Çünkü yapılandırılmış bağlamaları önerisi (http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/n4659.pdf §11.5.3) yapı elemanları getirmesi için nasıl kullanıldığını get
ilgili söylediklerinin yapıyorum. Yapıdaki öğelerden öğe almak için üye olmayan bir get
kullanılır.
get
fonksiyon
std
ad alanında aranılacak olan neden olacağından bu bulunacağını nerede, (o
std
olduğu tip
std::tuple<int, int>
ait olduğu argümanı çünkü) kodu yukarıdaki, derlemek olacağı varsayılmıştır. Ama bir hata alıyorum. Birisi burada doğru yaklaşımı açıklayabilir mi ve yukarıdaki kod neden çalışmaz? Bu durumda ADL'nin nasıl bir güç olması gerekir?
Çok ilginç! Yine de, bu tanımlanmamış fonksiyonu tanıtmak, başka sorunlara neden olabilir mi? Çatışmalar gibi mi? – Curious
@Curious Tercih edilmeye son verilseydi. Demek istediğim, aslında bunu yapma - Sadece açıklayıcı amaçlar için buraya koyuyorum. – Barry
hmmm, ADL'nin gerçekleşmesini zorlayabilmemin herhangi bir yolu var mı? 'Template' anahtar sözcüğünü denedim ama tabii ki çalışmıyor .. – Curious