gpt4 book ai didi

c++ - 创建一个表现出与 STL 容器 std::set 完全相同行为的类型

转载 作者:行者123 更新时间:2023-11-27 23:53:36 25 4
gpt4 key购买 nike

我有以下类型定义:

typedef std::pair<std::string, std::string> iprange;
typedef std::set<iprange> iprange_set;

当我尝试围绕 iprangeiprange_set 编写 lexical_cast 以及一些其他类型(例如 Json::Valuestd)时: string 编译器给出错误,因为 typedef 只是一个别名而不是真正的类型,所以它不能被重载。

有没有一种方法可以让一个类型在没有 typedef 的情况下展示现有类型的属性?

我正在寻找的结果是我应该能够使用该类型声明变量,并将其用作 boost::lexical_cast 中的参数

发布代码

#include <iostream>
#include <string>
#include <set>
#include <boost/lexical_cast.hpp>
using namespace std;

typedef set<string> ipaddr_list;

namespace boost {
template<>
string lexical_cast(const ipaddr_list* const & list)
{
return "qwe"; //actually code do convert ipaddr_list to string
}
};

int main()
{
ipaddr_list l;
l.insert("45.5.5.5-56.6.6.6");

string s = boost::lexical_cast<string>(l);
}

编译器给出以下错误:

在 test.cpp:4 包含的文件中:/usr/include/boost/lexical_cast.hpp:349:13: 错误:未定义模板的隐式实例化 'boost::STATIC_ASSERTION_FAILURE' BOOST_STATIC_ASSERT_MSG((result_t::value || boost::has_left_shift< std::basic_ostream< type >, T >::value), ^还有一些

最佳答案

您为 lexical_cast(const ipaddr_list*) 提供了特化- 一个带指针的函数。但是你并没有调用那个特化——你实际上并没有传递一个指向 lexical_cast 的指针。 .相反,您正在调用一个通用实现,它试图发送 ipaddr_list实例到流,但自然找不到合适的重载 operator<< .这就是断言要告诉您的内容。

关于c++ - 创建一个表现出与 STL 容器 std::set 完全相同行为的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44305163/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com