微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

C++ 模板和函数重载 Minimalish reproducible

如何解决C++ 模板和函数重载 Minimalish reproducible

Minimalish reproducible

我有两个功能:但是这样调用

pack<int>(some_vector,something_else)

some_vector 应该是这样的:

std::vector<int> some_vector;

抛出编译错误

LNK2019 main.obj 中未解析的外部符号

两个函数都已定义,使用 int 而不是 vector 调用 pack 编译得很好。
我想添加更多的包函数来接受映射、元组等(作为第一个参数)。这是解决这个问题的正确方法吗? (我对 C++ 没有经验)


template <typename T>
void pack(std::vector<T>& src,byte::container& dest,bool initial) {
    size_t n = src.size();
    size_t s = 0;
    uint8_t prefix;
    uint16_t post_prefix = n;
    bool use_post_prefix = false;
    if (n <= 15) {
        prefix = fixarray_t(n);
    }
    else if (n <= max16) {
        prefix = arr16;
        use_post_prefix = true;
    }
    else if (n <= max32) {
        prefix = arr32;
        use_post_prefix = true;
    }
    if (initial) {
        dest.clear_resize(int(n * 0.4));
    }
    dest.push_back(&prefix);
    if (use_post_prefix) {
        dest.push_back(&post_prefix);
    }
    for (uint32_t i = 0; i < n; i++) {
        pack(src[i],dest,false);
    }
}

void pack(uint64_t src,bool initial) {
    uint8_t prefix;
    if (src <= max4) {
        prefix = ufixint_t(src);
        dest.push_back(&prefix);
    }
    else if (src <= max8) {
        prefix = uint8;
        dest.push_back(&prefix);
        dest.push_back(uint8_t(src));
    }
    else if (src <= max16) {
        prefix = uint16;
        dest.push_back(&prefix);
        dest.push_back(uint16_t(src));
    }
    else if (src <= max32) {
        prefix = uint32;
        dest.push_back(&prefix);
        dest.push_back(uint32_t(src));
    }
    else if (src <= max64) {
        prefix = uint64;
        dest.push_back(&prefix);
        dest.push_back(uint64_t(src));
    }
    else {
        throw std::range_error(std::to_string(src) + " out of range!");
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。