2010-03-02 4 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에 대해서는 잘 모르겠지만 2 차원 배열을 사용하면 원하는 결과에 가까워 질 필요가 없습니까?

#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의 접근 방식과 비슷한 작은 도우미 함수 (링크 된 게시물 참조)를 만들었지 만 해결 방법은 고정 값을 사용하는 것 같습니다.

관련 문제