我在我的C ++ / CLI项目静态数组中使用过:
static array < array< String^>^>^ myarray=
{
{"StringA"},
{"StringB"}
};
是否可以以相同的方式创建字典? 我无法创建和初始化一个。
static Dictionary< String^, String^>^ myDic=
{
{"StringA", "1"},
{"StringB", "2"}
};
答案 0 :(得分:2)
您的词典示例和其他词组在C#中称为Collection Initializer
。
您无法在C ++ / CLI中执行此操作。
// C# 3.0
class Program
{
static Dictionary<int, string> dict = new Dictionary<int, string>
{
{1, "hello"},
{2, "goodbye"}
};
static void Main(string[] args)
{
}
}
答案 1 :(得分:1)
您无法直接在声明中执行此操作,但您可以使用静态构造函数通过让静态构造函数调用Add()
方法来执行一次初始化。
答案 2 :(得分:0)
我不知道CLI,但二维数组不应该与你想要的非常接近吗?
#include <iostream>
int main() {
static int a[][3] = { {1, 2, 3}, {4, 5, 6}};
std::cout << a[0][0] << " " << a[1][0];
//..
}
答案 3 :(得分:0)
虽然在C ++中你无法创建std::map
并像数组一样初始化它,但你可以在构造时使用这个构造函数加载地图:
template <class InputIterator>
map ( InputIterator first, InputIterator last,
const Compare& comp = Compare(), const Allocator& = Allocator() );
另一种方法是使用数组和搜索方法,例如binary_search
。如果数据没有改变,这可能很有用。
答案 4 :(得分:0)
我的方法是(.NET 4.5)。这样做是为了避免构造函数或其他“手动初始化程序”:
// file.h
using namespace System;
using namespace System::Collections::Generic;
// SomeClass
public://or private:
static Dictionary<String^, String^>^ dict = dictInitializer();
private:
static Dictionary<String^, String^>^ dictInitializer();
// file.cpp
#include "file.h"
Dictionary<String^, String^>^ SomeClass::dictInitializer(){
Dictionary<String^, String^>^ dict = gcnew Dictionary<String^, String^>;
dict->Add("br","value1");
dict->Add("cn","value2");
dict->Add("de","value3");
return dict;
}
答案 5 :(得分:0)
另见this Stackoverflow post。在C ++ / CLI中,不可能像其他人一样使用C#中的编译器功能 因此我创建了一个小辅助函数(参见链接的帖子),类似于@MrHIDEn的方法,但在他的解决方案中,他似乎使用了固定值。
答案 6 :(得分:0)
在C ++中:
#include <map>
std::map< int, std::string > status_to_str {
{0, "failure"},
{1, "none"},
{2, "success"},
};
void print_status(int status) {
std::cout<< status_to_str[status] << std::endl;
}