在我类
generic <class T>
public ref class CFifo
{
public:
enum class EnumResult
{ ... }
EnumResult AddData (int i_iStart, int i_iLength, array<T>^ i_aData);
...
}
我收到编译器崩溃(“c/c++优化编译器已停止工作”),错误为c1001,并提供了简化类的建议。该故障发生在.cpp中的
return
行:generic <class T>
CFifo<T>::EnumResult CFifo<T>::AddData (int i_iStart,
int i_iLength,
array<T>^ i_aData)
{
...
return CResult<EnumResult>::TraceMsg (ms_tracesource, TraceEventType::Error, EnumResult::Error_MutexTimeout, __FUNCTION__"()", "timeout at receiving mutex.");
CResult
类是另一个通用类:generic <class TResult> where TResult : value class // value class constraint is not necessary
public ref class CResult abstract sealed
我在其他类中使用同一行
CResult<EnumResult>::TraceMsg
没有问题。我可以无错误地创建和使用
EnumResult
变量,因此我认为将这种类型传递给通用类CResult
也应该起作用。谁能解释为什么编译器崩溃以及如何修复它?谢谢。
最佳答案
发现失败:
这是value class
中的generic <class TResult> ref class CResult
约束。
一旦删除它,编译器崩溃就消失了。奇怪的。
我必须修改CResult
中的代码:
从
return static_cast<TResult>(iResult);
至
return static_cast<TResult>(System::Enum::ToObject (TResult::typeid, iResult));
因为我不再能够直接从
int
转换为TResult
,由于value class
的限制,以前可以这样做。