如何在现有构造函数中添加附加参数。 C++ ASIO
Posted
技术标签:
【中文标题】如何在现有构造函数中添加附加参数。 C++ ASIO【英文标题】:How to add additional parameter in existing constructor. C++ ASIO 【发布时间】:2021-12-15 17:33:13 【问题描述】:我需要帮助来构建具有 3 个论点的端点。目前“IP 地址”和“端口”在构造函数中。但我需要包含一个整数参数来识别连接。理想情况如下所述。
asio::ip::tcp::endpoint endpoint(asio::ip::make_address("127.0.0.1", ec), 7497, clientId = 0);
您能否帮助我是否必须修改基类或者我可以继承基类并添加这个论点?如果继承容易,请指导我。
int main(int argc)
int clientId = 0;
asio::error_code ec;
// Create a "context" - essentially the platform specific interface
asio::io_context context;
// Get th addres of somewhere w wish to connect to
asio::ip::tcp::endpoint endpoint(asio::ip::make_address("127.0.0.1", ec), 7497);
// Create a socket, the context will deliver the implementation
asio::ip::tcp::socket socket(context);
// tell socket to try and connect
socket.connect(endpoint, ec);
if (!ec)
std::cout << "Conected!" << std::endl;
else
std::cout << "Failed to connect to address:\n" << ec.message() << std::endl;
if (socket.is_open())
system("pause");
return 0;
继承类:
#pragma once
#include <iostream>
#ifdef _WIN32
#define _WIN32_WINNT 0x0A00
#endif
#define ASIO_STANDALONE
#include <asio.hpp>
#include <asio/ts/buffer.hpp>
#include <asio/ts/internet.hpp>
// Get th addres of somewhere w wish to connect to
class clien : public asio::ip::tcp::endpoint, asio::ip::address
public:
typedef asio::ip::tcp::endpoint endpoint;
char asio::ip::address;
int clientId;
//clien(int cid);
clien(str ep, int p, int cid) : asio::ip::tcp::endpoint(ep), char asio::ip::address, int cid;
clientId = cid;
;
【问题讨论】:
这门课是你做的吗?如果不是,那么继承是唯一(合理)的方式。 嗨,不,该类来自 ASIO 头文件。我正在尝试继承基类并派生一个子类。但我是 C++ 的新手并且正在苦苦挣扎。所以,到目前为止,我已经编写了这段代码 - 请在继承类部分中参考它。 【参考方案1】:因为类重载方式看起来是最简单的:
class clien : public asio::ip::tcp::endpoint
// inherit endpoint (because it the class you want to change)
protected:
int __cid; // the id
public:
int clientId() const return __cid; // getter
void clientId(int cid) __cid = cid; // setter
clien(str ep, int p, int cid) :
asio::ip::tcp::endpoint(ep, p), // construct the actual endpoint
__cid(cid) // set the cid
;
我不熟悉这个库,所以某些类型(对于构造函数)可能是错误的。
【讨论】:
【参考方案2】:你可以使用端点和id创建一个新类型
struct MyEndpoint
asio::ip::tcp::endpoint endpoint;
int someId;
创建端点
auto const someId = 42;
auto myEndpoint = MyEndpoint .endpoint = boost::asio::ip::tcp::v4 (), 7497 , .someId = someId ;
现在您可以获取 id 和端点
myEndpoint.someId; // To get the id
myEndpoint.endpoint; // To get the endpoint
另一种思路是做一对id和endpoint
auto const someId=42;
auto idAndEndpoint= std::make_pair(someId, asio::ip::tcp::endpoint(asio::ip::make_address("127.0.0.1", ec), 7497));
现在您可以获取 id 和端点
auto &[id, endpoint] = idAndEndpoint;
【讨论】:
以上是关于如何在现有构造函数中添加附加参数。 C++ ASIO的主要内容,如果未能解决你的问题,请参考以下文章