Program ini menghasilkan jalan buntu keserakahan yang tidak diinginkan:
struct float4x4 {};
class C
{
float4x4 M();
};
float4x4 ::C::M()
{
return float4x4{};
}
: 8: 1: error: tidak ada anggota bernama 'C' di 'float4x4'; maksud Anda hanya 'C'?
float4x4 :: C :: M ()
^ ~~~~~~~~~~~
Yang bisa 'diperbaiki' menggunakan tipe trailing return:
auto ::C::M() -> float4x4
{}
sekarang semuanya baik-baik saja.
Jadi saya pikir kita tidak bisa sepenuhnya memenuhi syarat nama kelas saat menggunakan sintaks deklarator tipe-return-type?
c++
parsing
methods
fully-qualified-naming
v.oddou
sumber
sumber
::
, saya kira tidak ada cara lain.::C
terlihat seperti solusi untuk beberapa masalah lainnya. Kalau tidak, itu bisa sajaC
(seperti yang disarankan oleh kompiler;)Jawaban:
Anda dapat mengurung tanda kurung:
Saya tidak dapat benar-benar memberi tahu Anda apa yang membuat aturan ini ok, sementara bukan tanpa tanda kurung, meskipun saya diuji dengan gcc dan dentang (keduanya
-pedantic
). Saya lebih suka tipe trailing return.sumber