В C# и VB.Net я могу использовать CallerMemberNameAttribute, чтобы получить имя запустившего в виде строки:C++/CLI: Как использовать CallerMemberNameAttribute в C++/CLI?
public void Caller([CallerMemberName]string memberName = "")
{
Debug.Print(memberName);
}
Я хотел бы сделать то же самое в C++/CLI, но так или иначе я не могу получить его за работой. Пробовал несколько конструкций, и я начинаю задаваться вопросом, поддерживает ли компилятор C++/CLI этот атрибут.
Вот (упрощенный) реализация:
using namespace System::Runtime::CompilerServices;
public ref class InvokeExample
{
Invoke([CallerMemberName][Optional]String^ name)
{
Debug::Print(name);
}
}
При вызове этого метода в приложении C#, значение имени является недействительным. Также попытался с атрибутом DefaultParameterValue, но это тоже не помогло. Теперь закончились идеи.
Очевидным ответом было бы, почему бы не реализовать в C#? Ну, в этом конкретном случае я ограничен C++/CLI.
Нет смысла пытаться, это не реализовано в компиляторе C++. C++/CLI был заморожен в 2005 году. Вам придется использовать класс [StackTrace] (http://stackoverflow.com/a/2652591/17034). –
Имейте в виду, что предложение Ганса подразумевает серьезный штраф за исполнение. –