Как использовать __FILE __и __LINE __в качестве параметров по умолчанию в конструкторе на C++?

Я пытаюсь использовать макросы __FILE__и __LINE__в конструкторе в качестве параметров по умолчанию, но не могу заставить макросы использовать правильные файлы. Они продолжают расширяться из моего заголовочного файла.

Более подробно :Я хотел бы получить номер файла и строки, из которых создается экземпляр объекта как члена моего класса. Но я не хочу вводить параметры вручную каждый раз, когда хочу использовать объекты. Я знаю, что есть способ сделать это, но я не могу понять это. Сейчас я делаю следующее:

В моем заголовочном файле:

mnNumber( float x, const char* filename = __FILE__, int linenumber = __LINE__ ): 
          value( x ), mFileName( filename ), mFunctionName( nullptr ), mLineNumber(     linenumber ), mID( 0 )

Но FILE и LINE расширяются, как если бы они были из моего файла заголовка, а не из фактического местоположения, в котором я использую mnNumber.

Чтобы ответить на вопрос, почему я хотел бы это сделать, я хочу, чтобы код читал свою собственную кодовую страницу. Конкретные значения, которые я использую, регистрируются в менеджере, и конечный пользователь может редактировать их значения. Когда конечный пользователь редактирует значение, оно записывается обратно в кодовую страницу. Итак, мне нужно знать, откуда взялась ценность. Я также позволяю конечному пользователю сказать, что ему больше никогда не понадобится редактировать это значение, и когда он нажимает эту кнопку, значение преобразуется из mnNumber обратно в число с плавающей запятой, а тип на кодовой странице переписывается как число с плавающей запятой.. Или будет... надеюсь.

Какой-нибудь совет для меня?

6
задан Brian Tompsett - 汤莱恩 27 June 2016 в 18:32
поделиться