我希望使用
目前我正在使用自定义类来处理IP地址和网络,但我希望转移到
以下是示例代码(除了
此外,有没有更好的方法可以使用
另一个解决方案是继承
谢谢。
boost::asio
对IP地址执行数学运算。具体来说,我需要在现有地址上增加给定的整数以便于在我编写的软件中生成IP列表。目前我正在使用自定义类来处理IP地址和网络,但我希望转移到
boost::asio
上,以便我可以依靠它们正确地检查/验证地址和网络属性。以下是示例代码(除了
operator+
部分):using boost::asio::ip::make_address_v4;
using boost::asio::ip::address_v4;
auto add(const address_v4& address, std::size_t value = 1) {
return make_address_v4(address.to_uint() + value);
}
// This is definitely wrong
auto operator+(std::size_t value, const address_v4& address) {
return add(address, value);
}
int main() {
auto ip1 = make_address_v4("192.168.1.1");
fmt::print("IP address: {}\n", ip1.to_string());
auto ip2 = make_address_v4(ip1.to_uint() + 1);
fmt::print("IP address: {}\n", ip2.to_string());
// Add function
fmt::print("Added IP: {}\n", add(ip2, 8).to_string());
fmt::print("Added IP: {}\n", add(ip2).to_string());
// operator+
fmt::print("Added IP: {}\n", (ip2 + 4).to_string());
return 0;
}
add
函数正常工作,但我不知道如何重载它,以便可以执行以下操作: ip++
或 ip + 4
。此外,有没有更好的方法可以使用
boost::asio::ip::address_v4
进行数学计算? 我总是获取值作为 uint
并在那里进行数学运算。另一个解决方案是继承
boost::asio::ip::address_v4
并创建自定义操作器,但我不知道这是否会起作用,即使它起作用,这似乎是过度设计或更糟的是,我不知道这是否是一个好的实践,它看起来并不是。谢谢。
operator+
函数的参数顺序来创建另一个operator+
重载,然后它就能正常工作了。auto operator+(const address_v4& address, std::size_t value) { return add(address, value); }
- M. Galib Uludag