C# と VB.Net では、 CallerMemberNameAttributeを使用して呼び出し元の名前を文字列として取得できます。
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# アプリケーションでこのメソッドを呼び出すと、name の値が null になります。属性DefaultParameterValueも試しましたが、どちらも役に立ちませんでした。今、アイデアが不足しています。
明白な答えは、なぜ C# で実装しないのですか? この特定のケースでは、C++/CLI に限定されています。