I am getting back into C++ but don't have much experience with templates so I am a reaching out for a hint here. I am trying to iterate over all the NodePrt nodes starting with the root node using avro::NodePtr& root = schema.root(); But I just cannot figure out how to code up the method call to get the default value from a primitive whose schema defines one. For example, a simple schema like this:
{ "name": "simple_schema", "type": "record", "fields": [ { "name": "int_stat", "type": "long", "default": 999 } ] } I want to get my hands on that 999 value. Here is a snippet of a method that gets a NodePtr to an Avro record, retrieves the defaultValueAt(i) just fine, but how do I code up the call to retrieve the value() 999? 1. What should the return value look like given the default could be various types depending on the schema? 2. What should this call look like? default_value.value(); Thanks for any insight and guidance!!! void Encoder::encode_record( const avro::NodePtr& n, const csv_data_map& csv_data, avro::EncoderPtr encoder) const { size_t c = n->leaves(); cout << "Processing Avro record, name = " << n->name() << endl; for (size_t i = 0; i < c; ++i) { avro::GenericDatum default_value = n->defaultValueAt(i); // THIS IS THE PROBLEM PART I CANNOT FIGURE OUT default_value.value(); encode_type(n->leafAt(i), n->nameAt(i), csv_data, encoder, default_value); } } Building file: ../src/encoder.cpp Invoking: GCC C++ Compiler g++ -std=c++0x -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"src/encoder.d" -MT"src/encoder.o" -o "src/encoder.o" "../src/encoder.cpp" ../src/encoder.cpp: In member function ‘void Encoder::encode_record(const NodePtr&, const csv_data_map&, avro::EncoderPtr) const’: ../src/encoder.cpp:257:29: error: no matching function for call to ‘avro::GenericDatum::value()’ default_value.value(); ^ ../src/encoder.cpp:257:29: note: candidates are: In file included from ../src/encoder.cpp:7:0: /usr/local/include/avro/GenericDatum.hh:98:35: note: template<class T> const T& avro::GenericDatum::value() const template<typename T> const T& value() const; ^ /usr/local/include/avro/GenericDatum.hh:98:35: note: template argument deduction/substitution failed: ../src/encoder.cpp:257:29: note: couldn't deduce template parameter ‘T’ default_value.value(); ^ In file included from ../src/encoder.cpp:7:0: /usr/local/include/avro/GenericDatum.hh:109:29: note: template<class T> T& avro::GenericDatum::value() template<typename T> T& value(); ^ /usr/local/include/avro/GenericDatum.hh:109:29: note: template argument deduction/substitution failed: ../src/encoder.cpp:257:29: note: couldn't deduce template parameter ‘T’ default_value.value(); ^ make: *** [src/encoder.o] Error 1