Нет. Вы не можете . Потому что вы не можете определить имя функции во время выполнения. (то есть, чтобы позвонить Unique_22
или Unique_44
. Однако вы можете определенно позвонить Unique<22>
или Unique<44>
)
Так что вместо этого вы можете использовать template
решение. Объявите Unique
как показано ниже:
template<unsigned int LINE> void Unique ();
И #define
такой макрос:
#define UNIQUE template<> Unique<__LINE__>() {}
Я советую использовать __COUNTER__
вместо __LINE__
, если ваш компилятор поддерживает это.
[Примечание: это означает, что в любой строке вы можете вызвать UNIQUE
только один раз, а также макрос должен быть развернут в глобальном или namespace
объеме (не внутри метода).]