2010-03-02 53 views
3

我在C中++/CLI项目静态数组的,如:是否可以在C++/CLI环境中创建静态字典?

static array < array< String^>^>^ myarray= 
{ 
    {"StringA"}, 
    {"StringB"} 
}; 

是否有可能创建一个字典以同样的方式? 我无法创建并初始化一个。

static Dictionary< String^, String^>^ myDic= 
{ 
    {"StringA", "1"}, 
    {"StringB", "2"} 
}; 

回答

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) 
    { 
    } 
} 
0

我不知道CLI,但不应该二维数组得到你想要的东西很接近?

#include <iostream> 

int main() { 
    static int a[][3] = { {1, 2, 3}, {4, 5, 6}}; 
    std::cout << a[0][0] << " " << a[1][0]; 
    //.. 

} 
1

你不能在声明中直接去做,但你可以使用一个静态构造函数具有的静态构造函数调用Add()方法做一次初始化。

0

虽然在C++不能创建一个std::map和初始化它像一个数组,则可以使用此构造加载在构造图:

template <class InputIterator> 
    map (InputIterator first, InputIterator last, 
     const Compare& comp = Compare(), const Allocator& = Allocator()); 

一个替代方案是使用阵列和搜索方法如binary_search。如果数据没有改变,这可能很有用。

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; 
} 
0

另请参阅this Stackoverflow post。正如其他人所写,在C++/CLI中不可能像使用C#那样使用编译器功能。
因此,我创建了一个小帮助函数(请参阅链接的文章),类似于@MrHIDEn的方法,但在他的解决方案中,他似乎使用了固定值。

相关问题