1## current param load api
2### Cons
3#### long and awful code
4#### three functions
5#### not extensible
6#### no default value
7#### no variable length array
8```
9MyLayer  mylayer 1 1 in out 100 1.250000
10```
11```
12binary 100
13binary 1.250000
14```
15```cpp
16#if NCNN_STDIO
17#if NCNN_STRING
18int MyLayer::load_param(FILE* paramfp)
19{
20    int nscan = fscanf(paramfp, "%d %f", &a, &b);
21    if (nscan != 2)
22    {
23        fprintf(stderr, "MyLayer load_param failed %d\n", nscan);
24        return -1;
25    }
26
27    return 0;
28}
29#endif // NCNN_STRING
30int MyLayer::load_param_bin(FILE* paramfp)
31{
32    fread(&a, sizeof(int), 1, paramfp);
33
34    fread(&b, sizeof(float), 1, paramfp);
35
36    return 0;
37}
38#endif // NCNN_STDIO
39
40int MyLayer::load_param(const unsigned char*& mem)
41{
42    a = *(int*)(mem);
43    mem += 4;
44
45    b = *(float*)(mem);
46    mem += 4;
47
48    return 0;
49}
50```
51
52## new param load api proposed
53### Pros
54#### clean and simple api
55#### default value
56#### extensible
57#### variable length array
58```
597767517
60MyLayer  mylayer 1 1 in out 0=100 1=1.250000 -23303=5,0.1,0.2,0.4,0.8,1.0
61```
62```
63binary 0xDD857600(magic)
64
65binary 0
66binary 100
67binary 1
68binary 1.250000
69binary -23303
70binary 5
71binary 0.1
72binary 0.2
73binary 0.4
74binary 0.8
75binary 1.0
76binary -233(EOP)
77```
78```cpp
79int MyLayer::load_param(const ParamDict& pd)
80{
81    // pd.get( param id (seq), default value );
82    a = pd.get(0, 100);
83    b = pd.get(1, 1.25f);
84
85    // get default value for c if not specified in param file
86    c = pd.get(2, 0.001);
87
88    // get array
89    d = pd.get(3, Mat(len, array));
90    return 0;
91}
92```
93