gpt4 book ai didi

c++ - 静态函数、内联和模板?

转载 作者:行者123 更新时间:2023-11-30 03:11:28 25 4
gpt4 key购买 nike

我有一个带有静态函数的模板类(请参阅下面的连接函数)。这个模板类是第 3 方库(称为 LibA)的一部分。我的代码使用这个库并包含下面的标题,因为我需要使用模板类。当我在没有内联函数(-fno-default-inline 和 gcc)的情况下编译我的库时,我没有遇到任何问题。当我在版本 (-O2) 中编译时,我的应用程序崩溃了。

我想知道在模板中使用静态函数意味着什么,以及内联如何影响它。

template<class T>
class TCPConnector
: public IOHandler {
private:
string _ip;
uint16_t _port;
vector<uint32_t> _protocolChain;
bool _closeSocket;
Variant _customParameters;
public:

TCPConnector(int32_t fd, string ip, uint16_t port,
vector<uint32_t>& protocolChain, const Variant& customParameters)
: IOHandler(fd, IOHT_TCP_CONNECTOR) {
_ip = ip;
_port = port;
_protocolChain = protocolChain;
_closeSocket = true;
_customParameters = customParameters;
}

virtual ~TCPConnector() {
//FINEST("Close socket: %d", _closeSocket);
if (_closeSocket) {
close(_fd);
//FINEST("Socket closed!");
}
}


static bool Connect(string ip, uint16_t port,
vector<uint32_t>& protocolChain, Variant& customParameters) {

protoent *pProtocol = getprotobyname("IP");
if (pProtocol == NULL) {
FATAL("Unable to resolve protocol number for IP");
return 0;
}

int32_t fd = (int32_t) socket(PF_INET, SOCK_STREAM, pProtocol->p_proto);
if (fd <= 0) {
FATAL("Unable to create fd");
return 0;
}

if (!SetFdNonBlock(fd)) {
FATAL("Unable to put socket in non-blocking mode");
return false;
}

TCPConnector<T> *pTCPConnector = new TCPConnector(fd, ip, port,
protocolChain, customParameters);

if (!pTCPConnector->Connect()) {
IOHandlerManager::EnqueueForDelete(pTCPConnector);
FATAL("Unable to connect");
return false;
}

return true;
}

};

最佳答案

我认为崩溃与您使用模板、静态或内联无关。至少在这种特殊情况下。

您应该尝试找出崩溃的原因,例如通过分析转储。

关于c++ - 静态函数、内联和模板?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2232247/

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