将所有 URL 组织在类中的一个位置
Organize all URLs in one place inside a class
我在整个类实现中使用HTTP请求的URL:
QNetworkRequest m_request;
m_request.setUrl(QUrl("http://" + m_IP + ":" + m_Port + "/details"));
request.setUrl(QUrl("http://" + m_IP + ":" + m_Port + "/sli"));
m_request.setUrl(QUrl("http://" + m_IP + ":" + m_Port + "/sli/preview"));
m_request.setUrl(QUrl("http://" + m_IP + ":" + m_Port + "/sli/send"));
m_request.setUrl(QUrl("http://" + m_IP + ":" + m_Port + "/sli/download"));
m_request.setUrl(QUrl("http://" + m_IP + ":" + m_Port + "/advanced-sli"));
m_request.setUrl(QUrl("http://" + m_IP + ":" + m_Port + "/profiles/" + ip + ":" + port));
m_request.setUrl(QUrl("http://" + m_IP + ":" + m_Port + "/terminate"));
如何在一个地方组织我所有的 URL,以便整洁和易于访问?
一种选择是在类实现源文件之上使用这样的static const
:
static const QUrl url1 = QUrl("http://" + m_IP + ":" + m_Port + "/details");
static const QUrl url2 = QUrl("http://" + m_IP + ":" + m_Port + "/terminate");
static const QUrl url3 = QUrl("http://" + m_IP + ":" + m_Port + "/advanced-sli");
// ...
m_request.setUrl(url1);
m_request.setUrl(url2);
m_request.setUrl(url3);
// ...
但问题是我无法访问成员m_IP
和m_Port
在我的static const
定义中。
更新:解决方案
最后,我在类实现之上实现了这一点:
static const QString routeDetails = "http://%1:%2/details" ;
static const QString routeSli = "http://%1:%2/sli" ;
static const QString routeSliPreview = "http://%1:%2/sli/preview" ;
static const QString routeSliSend = "http://%1:%2/sli/send" ;
static const QString routeSliDownload = "http://%1:%2/sli/download" ;
static const QString routeAdvancedSli = "http://%1:%2/advanced-sli" ;
static const QString routeProfiles = "http://%1:%2/profiles/%3:%4" ;
static const QString routeTerminate = "http://%1:%2/terminate" ;
在整个实现过程中,我有这样的陈述:
m_request.setUrl(QUrl(routeDetails.arg(m_IP).arg(m_Port)));
request.setUrl(QUrl(routeSli.arg(m_IP).arg(m_Port)));
m_request.setUrl(QUrl(routeSliPreview.arg(m_IP).arg(m_Port)));
m_request.setUrl(QUrl(routeSliSend.arg(m_IP).arg(m_Port)));
m_request.setUrl(QUrl(routeSliDownload.arg(m_IP).arg(m_Port)));
m_request.setUrl(QUrl(routeAdvancedSli.arg(m_IP).arg(m_Port)));
m_request.setUrl(QUrl(routeProfiles.arg(m_IP).arg(m_Port).arg(ip).arg(port)));
m_request.setUrl(QUrl(routeTerminate.arg(m_IP).arg(m_Port)));
注意:这是一个主观问题。解决方案可能会因自己的用例和要求而异。
您可以将 URL 包装为存储在单独头文件中的命名空间中的原始文本字符串(例如urls.hpp
(。然后,你可以使用 QString::arg(( 在运行时使用 ip:port 格式化。
下面是一个示例:
#include <QDebug>
#include <QString>
#include <QUrl>
namespace url {
static constexpr auto default_ip = "localhost";
static constexpr auto default_port = "8080";
static constexpr auto about = "about";
static constexpr auto services = "services";
static constexpr auto products = "products";
QUrl fmt( const QString& route, const QString& ip = default_ip, const QString& port = default_port ) noexcept
{
static const auto fmt = QString{ "http://%1:%2/%3" };
return fmt.arg(ip).arg(port).arg(route);
}
} // url
int main()
{
constexpr auto ip = "192.168.123.123";
constexpr auto port = "9090";
const auto about = url::fmt( url::about );
const auto services = url::fmt( url::services );
const auto products = url::fmt( url::products, ip, port );
qDebug() << about;
qDebug() << services;
qDebug() << products;
return 0;
}
输出:
QUrl("http://localhost:8080/about")
QUrl("http://localhost:8080/services")
QUrl("http://192.168.123.123:9090/products")
如果不需要默认的,您可以通过先存储它们来避免每次传递 ip:port。返回格式化 URL 的函数可以在内部使用这些 URL,而无需显式参数。
相关文章:
- 我的目标是编写一个程序来计算和存储字符串在字符数组中出现的位置
- 将一个向量插入另一个向量的某个位置
- 将所有 URL 组织在类中的一个位置
- 计算在同一位置至少包含一个常用字符的不同字符串对
- 如何在另一个字符串的x位置插入一个字符串?
- C++强制变量到一个固定的内存位置
- 创建一个类来访问和指定向量类型,并构建一个获取位置并为其分配区域的类
- 在多维向量中的特定位置添加一个值
- C++将包含的库 (ref DLL) 从根目录更改为另一个位置
- 查找 2D 向量的位置,该向量是类C++的一个元素
- 创建一个函数以在给定位置将元素插入到列表中
- C++11 中的随机数:有没有一种简单的方法可以将生成器种子放在代码的一个位置,然后在不同的函数中使用它?
- 快速从文件中读取下一个字符串,而无需移动文件的位置
- 给定一个用三角形镶嵌的补丁,如何修改其新的顶点位置
- 如何正确删除一行控件并在该位置动态创建一个新控件
- 如何在点击的QPushButton的位置画一个形状
- 如何编写一个 void 函数,该函数将在数组中搜索值,并通过引用将该值的位置传递回 main 函数
- 将过滤器中的所有.cpp和.h移动到另一个项目并更正其文件夹位置
- 如何在 MFC 中围绕当前光标的位置绘制一个矩形
- 访问违反读数位置时,当另一个垫子中的push_back垫子