嗯,我还没有找到说这是不可能的东西,但我开始认为它可能是。你能做这个工作吗?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