嗯,我還沒有找到說這是不可能的東西,但我開始認爲它可能是。你能做這個工作嗎?C++/cli引用屬性
using namespace System;
template <typename T>
void unset(Nullable<T>& var) { var = Nullable<T>(); }
void unset(String^% var) { var=nullptr; }
//this is really a C# class in my situation, so I can't change its types
public ref class Foo
{
public:
property Nullable<Decimal> Dec;
property Nullable<int> Num;
property String^ Str;
};
int main()
{
Foo^ foo = gcnew Foo;
foo->Dec = Decimal(1.2);
foo->Num = 3;
foo->Str = "hi";
unset(foo->Dec);
unset(foo->Num);
unset(foo->Str);
Console::WriteLine(foo->Dec);
Console::WriteLine(foo->Num);
Console::WriteLine(foo->Str);
}
更新:從代碼生成宏調用約50個參數調用unset。我寧願不必爲每種類型製作宏的變體。
感謝您的信息。我沒有寫出原始代碼,不認爲&必然是有意的,但是這個示例編譯時沒有警告。不作爲答案,但因爲我有我的手指交叉,有一個解決方案:) – Thomas 2011-04-01 11:54:16
如果你不認爲這是答案,然後我做了一個非常糟糕的工作,解釋爲什麼這是不可能的。那麼你不應該將它標記爲答案。 – 2011-04-01 12:11:19
嗯,我的希望是基於獲得Set函數的訪問權限,我現在相當肯定是不可能的。 – Thomas 2011-04-01 12:18:35