2
#include <iostream>
#include <typeinfo>
#include <map>
#include <stdlib.h>
using namespace std;

struct foo {
    int one;
    int i;
    int s;  
};

template<class myType>
void serialize(myType b, string &a, int epe) {

    //three.resize(42);
    int type = typeid(b).name()[35] == 'S' ? 1 : 0; // testing if the map(b) value weather a struct                                or an int

    if (type) {
        auto it = b.begin();
        cout << sizeof(it->second) / sizeof(int) << endl;
        cout << it->second.one;
    } else {
        cout << sizeof(b) / sizeof(int) << endl;
    }

}

int main() {
    cout << "Hello world!" << endl;
    map<int, int> hey;

    map<int, foo> heya {
        { 1, { 66 } },
    };

    typedef map<int, foo> mappy;
    typedef map<int, int> happy;

    string duck;
    auto it = heya.begin();
    serialize<happy>(hey, duck, 4);
    serialize<mappy>(heya, duck, 4);

    return 0;
}

したがって、このエラーが発生しています。(map<int,int>)使用する前に型の特殊化を試みたにもかかわらず、構造体ではなく int に到達してはならないテンプレート関数の一部でint 型の値を使用してマップをテストしているためだと思います。機能、まだ機能していません。

serialize\main.cpp|36|error: request for member 'one' in      'it.std::_Rb_tree_iterator<_Tp>::operator->
   [with _Tp = std::pair<const int, int>, std::_Rb_tree_iterator<_Tp>::pointer = std::pair<const int, int>*]()->std::pair<const int, int>::second', 
  which is of non-class type 'int'|
  ||=== Build finished: 1 errors, 1 warnings ===|
4

1 に答える 1