我 ac# dev 试图进入 c++,我正在编写一些自定义控件。我需要以下复杂 c# 字典的 c++ 等价物
private static Dictionary<PinchscapeColor,
Dictionary<PinchscapeColorLevel, Brush>> AccentColorMap;
PinchscapeColor 和 PinchscapeColorLevel 是简单的 c# 枚举
public enum PinchscapeColorLevel
{
Light,
Medium
Dark
}
public enum PinchscapeColor
{
PinchscapeCyan,
PinchscapeLime,
PinchscapeMagenta,
PinchscapeTangerine,
PinchscapePlum
}
我像这样计算一个特定的颜色/颜色级别组合(在c#中)
var color = AccentColorMap[PinchscapeColor.PinchscapeCyan][PinchscapeColorLevel.Dark];
我在 C++ 中尝试这样做已经成功了:
我的枚举:
public enum class PinchscapeColorLevel
{
Light,
Medium,
Dark
};
public enum class PinchscapeColor
{
PinchscapeCyan,
PinchscapeLime,
PinchscapeMagenta,
PinchscapeTangerine,
PinchscapePlum
};
我像这样在我的头文件中定义了一个映射
Platform::Collections::Map<PinchscapeBasicControls::PinchscapeColor,
Platform::Collections::Map<PinchscapeBasicControls::PinchscapeColorLevel,
Windows::UI::Xaml::Media::Brush^>^>^ colorMap;
但我收到以下编译器错误:
程序文件 (x86)\microsoft visual studio 11.0\vc\include\collection.h(1118):错误 C3986:“调用”:公共成员的签名包含本机类型“std::less<_Ty>”(这是第一行,它会永远持续下去)
有谁知道我做错了什么?我以为这会很容易:(
编辑
请在下面找到一个最小的代码示例,它是您复制问题所需的所有代码:
1) Class1.h
#pragma once
namespace WindowsRuntimeComponent1
{
public enum class ColorLevelEnum
{
Light,
Medium,
Dark
};
public enum class ColorEnum
{
Cyan,
Lime,
Magenta,
Tangerine,
Plum
};
public ref class Class1 sealed
{
private:
Windows::Foundation::Collections::IMap<WindowsRuntimeComponent1::
ColorEnum,Windows::Foundation::Collections::IMap<WindowsRuntimeComponent1::
ColorLevelEnum,Windows::UI::Xaml::Media::Brush^>^>^ colorMap;
public:
Class1();
};
}
Class1.cpp
#include "pch.h"
#include <collection.h>
#include "Class1.h"
using namespace WindowsRuntimeComponent1;
using namespace Windows::UI::Xaml::Media;
using namespace Platform::Collections;
using namespace Platform;
Class1::Class1()
{
if (colorMap == nullptr)
{
colorMap = ref new Map<ColorEnum,Map<ColorLevelEnum,Brush^>^>();
}
}
希望能帮助您重现问题
感谢任何花时间帮助我解决这个问题的人