music 发表于 2020-7-24 21:03:07

下面的函数怎么改成不用模板的调用

const int NUM_IN= 4;
const int NUM_REC = 2;// recovery

#define BUF_SIZE 1024


函数定义的地方

template<typename gtype, typename utype>
int test4(int NUM_IN, int *expected_bases) {
//const int NUM_IN= 10;

const int NUM_REC = 1;// recovery
const int LOW_EXPONENT = 1;

u8 data;

int high_exponent = LOW_EXPONENT + NUM_REC - 1;

for (int i = 0; i < NUM_IN; i++) {
    // fill with zeros,
    for (int k = 0; k < BUF_SIZE; k++) {
      data = (u8)0;
    }
    // EXCEPT write a (little endian) 1 in a different place for each file
    // In the i-th file, it is written into the i-th location
    data = (u8) 1;
}
// zero recovery
for (int j = 0; j < NUM_REC; j++) {
    for (int k = 0; k < BUF_SIZE; k++) {
      data = (u8)0;
    }
}


ReedSolomon<gtype> rs_creator;

//cout << "creator.setinput" << NUM_IN << endl;
if (!rs_creator.SetInput(NUM_IN, cout, cerr)) {
    cerr << "rs_creator.SetInput returned false";
    return 1;
}
//cout << "creator.setoutput" << LOW_EXPONENT << " " << high_exponent << endl;
if (!rs_creator.SetOutput(false, LOW_EXPONENT, high_exponent)) {
    cerr << "rs_creator.SetOutput returned false";
    return 1;
}
//cout << "creator.compute" << endl;
if (!rs_creator.Compute(nlSilent, cout, cerr)) {
    cerr << "rs_creator.Compute returned false";
    return 1;
}

for (int i = 0; i < NUM_IN; i++) {
    for (int j = 0; j < NUM_REC; j++) {
      //cout << "creator.process " << BUF_SIZE << " " << i << " " << j <<
endl;
      rs_creator.Process(BUF_SIZE, i, &(data), j, &(data)
);
    }
}


// The recovery file has exponent 1 and should
// contain each base to the power 1.
for (int i = 0; i < NUM_IN; i++) {
    // read little-endian value
    utype v = 0;
    for (int byte_index = 0; byte_index < sizeof(utype); byte_index++) {
      u8 byte = data;
      v |= (((utype)byte) << (byte_index*8));
    }
    int base = v;
    if (base != expected_bases) {
      cerr << "base at location " << i << " did not match expected." << endl;
      cerr << "   base   = " << base << endl;
      cerr << "   expected = " << expected_bases << endl;
      return 1;
    }
}
return 0;
}

====================

在下面的函数中被用到

int expected_bases16 = {2, 4, 16, 128, 256, 2048, 8192, 16384, 4107,
32856};
if (test4<Galois16,u16>(10, expected_bases16)) {
    cerr << "FAILED: test4(16)" << endl;
    return 1;
}

0xAA55 发表于 2020-7-26 18:28:23

有必要改么。。。
页: [1]
查看完整版本: 下面的函数怎么改成不用模板的调用