Thread overview | ||||||
---|---|---|---|---|---|---|
|
October 22, 2020 Recommended way to use __FILE__/__LINE__ etc. | ||||
---|---|---|---|---|
| ||||
There are two ways how __FILE__, __LINE__ etc. can se used in function parameters: as regular parameters and as template parameters: void rt(string file=__FILE__, int line=__LINE__, string func=__FUNCTION__) { writeln(file,"(",line,"): ",func); } void ct(string file=__FILE__, int line=__LINE__, string func=__FUNCTION__)() { writeln(file,"(",line,"): ",func); } What is recommended way? What are pros/cons of each case? |
October 22, 2020 Re: Recommended way to use __FILE__/__LINE__ etc. | ||||
---|---|---|---|---|
| ||||
Posted in reply to Andrey Zherikov | On Thu, Oct 22, 2020 at 03:32:57PM +0000, Andrey Zherikov via Digitalmars-d-learn wrote: > There are two ways how __FILE__, __LINE__ etc. can se used in function parameters: as regular parameters and as template parameters: [...] > What is recommended way? > What are pros/cons of each case? I don't know what's the "recommended" way, but generally, I prefer to pass them as regular parameters. Otherwise you will get a lot of template bloat: one instantiation per file/line combination. However, sometimes there is not much choice: if your function is variadic, then you pretty much have to use template parameters, 'cos otherwise you won't be able to pick up the __FILE__/__LINE__ of the caller with default arguments. T -- Knowledge is that area of ignorance that we arrange and classify. -- Ambrose Bierce |
October 22, 2020 Re: Recommended way to use __FILE__/__LINE__ etc. | ||||
---|---|---|---|---|
| ||||
Posted in reply to H. S. Teoh | On Thursday, 22 October 2020 at 16:03:45 UTC, H. S. Teoh wrote: > On Thu, Oct 22, 2020 at 03:32:57PM +0000, Andrey Zherikov via Digitalmars-d-learn wrote: >> There are two ways how __FILE__, __LINE__ etc. can se used in function parameters: as regular parameters and as template parameters: > [...] >> What is recommended way? >> What are pros/cons of each case? > > I don't know what's the "recommended" way, but generally, I prefer to pass them as regular parameters. Otherwise you will get a lot of template bloat: one instantiation per file/line combination. > > However, sometimes there is not much choice: if your function is variadic, then you pretty much have to use template parameters, 'cos otherwise you won't be able to pick up the __FILE__/__LINE__ of the caller with default arguments. > > > T You will. This is possible since v2.079.0 (March 2018): https://dlang.org/changelog/2.079.0.html#default_after_variadic So yeah, always pass them as function parameters to avoid bloat. |
October 22, 2020 Re: Recommended way to use __FILE__/__LINE__ etc. | ||||
---|---|---|---|---|
| ||||
Posted in reply to Mathias LANG | Thanks for all your answers! |
Copyright © 1999-2021 by the D Language Foundation